我正在使用MongoDB尝试使用正确的BsonDate
将DateTime
反序列化为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
。
答案 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();
我想如果不设置那种类型就行。如果没有,你知道如何设置那种......