将DateTime转换为long,也可以转换为其他方式



我想在表中以数字形式存储日期。我知道该怎么做,但我不知道该怎么回去。如何将长变量强制转换为ToDateTime。

DateTime now = DateTime.Now;
long t = now.ToFileTime();
DateTime today = t.ToDateTime;  // I am looking for something like this line. This Method does not exist

我知道有很多方法可以将DateTime转换为long。我不介意用哪种技术。我只想有一种可以来回转换的方式。

从DateTime:开始

long DateTime.Ticks

到日期从长开始的时间:

new DateTime(long)

从长到日期时间:new DateTime(long ticks)

从DateTime到long:DateTime.Ticks

使用对long t = now.TicksDateTime Today = new DateTime(t)

由于您使用的是ToFileTime,因此您希望使用FromFileTime来实现另一种方式。但请注意:

通常,FromFileTime方法恢复以前的DateTime值通过ToFileTime方法保存。但是,这两个值可能不同在以下条件下:

如果DateTime值的序列化和反序列化发生在不同的时区。对于例如,如果具有美国东部时间下午12:30时区被序列化,然后在美国太平洋时间反序列化区域,下午12:30的原始值。调整为上午9:30以反映两个时间之间的差异区域。

如果序列化的DateTime值表示无效时间在本地时区。在这种情况下,ToFileTime方法调整恢复了DateTime值,以便表示本地的有效时间时区。

如果您不关心存储了DateTime的哪种long表示,则可以按照其他人的建议使用TicksTicks可能更可取,具体取决于您的要求,因为ToFileTime返回的值似乎在Windows文件系统API的上下文中)。

有几种可能性(请注意,这些长值与Unix epoch.不同

对于您的示例(要反转ToFileTime()),只需使用DateTime.FromFileTime(t)

有一个DateTime构造函数需要很长的时间。

DateTime today = new DateTime(t); // where t represents long format of dateTime 
   long dateTime = DateTime.Now.Ticks;
   Console.WriteLine(dateTime);
   Console.WriteLine(new DateTime(dateTime));
   Console.ReadKey();

如果您想使用1970年以来的秒数而不是Ticks:

UTC:

long secondsSince1970 = DateTimeOffset.Now.ToUnixTimeSeconds();

当地时间:

long secondsSince1970 = DateTime.Now.Ticks / 10000000 - 62135596800;

回到DateTime

DateTime value = DateTime.MinValue.AddSeconds(secondsSince1970).AddYears(1969);

我将添加一些从字符串到DateTime到长的额外转换

string timeString = "2016-08-04";
DateTime date = DateTime.Parse(timeString);
long dateTime = date.Ticks;

这里有一种简写的说法:

long dateTime = DateTime.Parse("2016-08-04").Ticks;
//And for the long to DateTime
DateTime date = new DateTime(dateTime);

相关内容

  • 没有找到相关文章