将UTCTime中的DateTime转换为我的" local"时间?

时间:2016-01-29 14:58:32

标签: c# mongodb date datetime

我正在使用MongoDB尝试使用正确的BsonDateDateTime反序列化为Kind。当DateTime序列化为MongoDB时,它以UTC格式保存,当反序列化时,它也以UTC格式返回。

我的问题是,我似乎无法将我从Mongo返回的DateTime转换为我当地的DateTime(UTC到EST)。我很确定我可以通过删除我的时区的UTC时间偏移量(AddHours)解决我的问题,但我很确定DateTime可以为我做这个并且可以处理任何时区应用程序运行于。

// Deserializing the DateTime object
DateTime eventTimeStamp = (DateTime)aDoc[MongoStrings.Log_Field_TimeStamp];
Console.Out.WriteLine("UtcDate: " + eventTimeStamp);
Console.Out.WriteLine("Locale : " + eventTimeStamp.Kind);

// First attempt at conversion
DateTime localTime = DateTime.SpecifyKind(eventTimeStamp, DateTimeKind.Local);
Console.Out.WriteLine("NewTime: " + localTime);
Console.Out.WriteLine("Locale : " + localTime.Kind);

// Another attempt at conversion
DateTime localTime2 = new DateTime(eventTimeStamp.Ticks, DateTimeKind.Local);
Console.Out.WriteLine("NewTim2: " + localTime2);
Console.Out.WriteLine("Locale : " + localTime2.Kind);

上面的代码产生以下输出

UtcDate: 1/29/2016 2:54:05 PM
Locale : Utc
NewTime: 1/29/2016 2:54:05 PM
Locale : Local
NewTim2: 1/29/2016 2:54:05 PM
Locale : Local

生成该日志的当地时间是9:54:05 AM

1 个答案:

答案 0 :(得分:2)

这可能对您有用:

// This is your code
// Deserializing the DateTime object
DateTime eventTimeStamp = (DateTime)aDoc[MongoStrings.Log_Field_TimeStamp];
Console.Out.WriteLine("UtcDate: " + eventTimeStamp);
Console.Out.WriteLine("Locale : " + eventTimeStamp.Kind);

// This is new code
Console.Out.WriteLine("LocalDate: " + eventTimeStamp.ToLocalTime());

原因是你的localTime变量设置为与UTC中的时间戳完全相同的时间戳,你只需说它应该作为本地时间。但是这个设置作为本地时间没有时间的转换,它只是说这是什么样的时间,以便其他方法(如ToLocalTime)知道该怎么做...

如果你想在变量中使用本地时间,那么它可能是这样的:

DateTime localTime = eventTimeStamp.ToLocalTime();

我想如果不设置那种类型就行。如果没有,你知道如何设置那种......