如何在不使用日期时间的情况下将年、月和日转换为刻度
本文关键字:转换 情况下 时间 日期 | 更新日期: 2023-09-27 18:21:54
long ticks = new DateTime(2012, 1, 31).ToLocalTime().Ticks; // 634635684000000000
但是如何在没有日期时间构造函数的情况下做到这一点?
编辑
我真正想要的是只保留滴答声中的年、月和日。
long ALL_Ticks = DateTime.Now.Ticks; // 634636033446495283
long Only_YearMonthDay = 634635684000000000; // how to do this ?
我想使用 Linq.Translations 在 linq-sql 查询中使用它。
如果您只需要当前日期时间的日期部分的刻度线,您可以使用:
long Only_YearMonthDay = DateTime.Now.Date.Ticks; //634635648000000000
//DateTime.Now.Date.Ticks + DateTime.Now.TimeOfDay.Ticks == DateTime.Now.Ticks
您可以找出计算中的天数,然后乘以 864,000,000,000(即一天中有多少个即时报价(。 这就是你要找的吗? 这里有一些文档:http://msdn.microsoft.com/en-us/library/system.timespan.ticksperday.aspx。
快乐编码,
干杯
克里斯。
好吧 - 没有正确考虑这个问题! 刻度表示自 0001 年 1 月 1 日午夜 12:00:00 以来的 100 纳秒间隔量。 您需要计算自该日期以来已经过去了多少天,然后将其乘以每日刻度值!
如果我理解正确的话,你不担心一天中特定时间的滴答声?! 因此,它将大致如下:
var ticksToDate = (DateTime.UtcNow - DateTime.MinValue).Days * 864000000000;
这回答了你的问题吗?
除非您有其他方法来获取当前日期和时间,否则这将是相当困难的。根据MSDN:
单个刻度表示一百纳秒或千万分之一秒。一毫秒内有 10,000 个刻度。
此属性的值表示自 0001 年 1 月 1 日午夜 12:00:00 以来经过的 100 纳秒间隔数,表示 DateTime.MinValue。它不包括可归因于闰秒的刻度数。
现在,如果您知道当前的日期和时间,则可以计算自January 1, 0001
以来已经过去了多少天,并使用它来计算即时报价的数量。
我知道你不想要日期的小时部分。如果使用日期,则仅获取日期(例如:01/01/2012 00:00:00(
long ticks = new DateTime(2012, 1, 31).Date.Ticks;
当然,已经创建的任何日期时间对象都是相同的。
long ticks = dateObject.Date.Ticks;
你的帖子中已经有了答案:
long ALL_Ticks = DateTime.Now.Ticks;
// that's the ticks (from DateTime.MinValue) until 'now' (this very moment)
long ticks = new DateTime(2012, 1, 31).ToLocalTime().Ticks;
// or
long ticks = DateTime.Now.Date.Ticks;
// that's the ticks until the beginning of today
long yearmonthticks = new DateTime(2012, 1, 1).ToLocalTime().Ticks;
// that's the ticks until the beginning of the month
// etc..., the rest is simple subtractions
由于您的问题没有指定不使用 DateTime 构造函数的任何原因,因此这是解决看似您的问题的最佳解决方案。
我有一个用例,我无法使用日期时间,但需要从滴答中获取年/月。
我使用DateTime背后的来源来弄清楚如何。若要采用另一种方式,您可以查看构造函数,其中一个构造函数调用以下代码。
private static long DateToTicks(int year, int month, int day) {
if (year >= 1 && year <= 9999 && month >= 1 && month <= 12) {
int[] days = IsLeapYear(year)? DaysToMonth366: DaysToMonth365;
if (day >= 1 && day <= days[month] - days[month - 1]) {
int y = year - 1;
int n = y * 365 + y / 4 - y / 100 + y / 400 + days[month - 1] + day - 1;
return n * TicksPerDay;
}
}
throw new ArgumentOutOfRangeException(null, Environment.GetResourceString("ArgumentOutOfRange_BadYearMonthDay"));
}
这可以在下面的链接中找到,当然,您需要重写以满足您的需求,并查找常量和IsLeapYear函数。
https://referencesource.microsoft.com/#mscorlib/system/datetime.cs,602