long ticks = new DateTime(2012, 1, 31).ToLocalTime().Ticks; // 634635684000000000
但如何在没有DateTime 构造函数的情况下执行此操作?
修改
我真正想要的是只保留年龄,月份和天数。
long ALL_Ticks = DateTime.Now.Ticks; // 634636033446495283
long Only_YearMonthDay = 634635684000000000; // how to do this ?
我想在使用Linq.Translations的linq-sql查询中使用它。
答案 0 :(得分:3)
如果您只想要当前日期时间的日期部分的刻度,您可以使用:
long Only_YearMonthDay = DateTime.Now.Date.Ticks; //634635648000000000
//DateTime.Now.Date.Ticks + DateTime.Now.TimeOfDay.Ticks == DateTime.Now.Ticks
答案 1 :(得分:2)
您可以找出计算中的天数,然后乘以864,000,000,000(即一天中的滴答数)。那是你在找什么?这里有一些文档:http://msdn.microsoft.com/en-us/library/system.timespan.ticksperday.aspx。
快乐的编码,
干杯,
克里斯。
好的 - 没想到这一点!刻度表示自0001年1月1日午夜12点00分起100纳秒间隔的数量。您需要计算自该日期起经过的天数,然后乘以每天的刻度值!
如果我理解你的话,你不担心一天中特定时间的嘀嗒声吗?!所以,这将是:
var ticksToDate = (DateTime.UtcNow - DateTime.MinValue).Days * 864000000000;
这会回答你的问题吗?
答案 2 :(得分:0)
除非你有其他方式来获取当前的日期和时间,否则这将是相当困难的。根据{{3}}:
单个刻度表示一百纳秒或一百万分之一秒。一毫秒内有10,000个滴答。
此属性的值表示自0001年1月1日午夜12:00:00起经过的100纳秒间隔的数量,表示DateTime.MinValue。它不包括可归因于闰秒的刻度数。
现在,如果你知道当前的日期和时间,你可以计算自January 1, 0001
以来经过的天数,并用它来计算滴答数。
答案 3 :(得分:0)
您的帖子中已有答案:
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构造函数的原因,因此这是解决您问题的最佳解决方案。
答案 4 :(得分:0)
我知道你不想要日期的小时部分。如果您使用日期,那么您只能获得当天(例如:01/01/2012 00:00:00)
long ticks = new DateTime(2012, 1, 31).Date.Ticks;
当然,任何已创建的DateTime对象都是相同的。
long ticks = dateObject.Date.Ticks;
答案 5 :(得分:0)
我有一个用例,其中我无法使用DateTime,但是需要Ticks中的Years / Months。
我使用了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