我使用DateTimeWithZone结构是乔恩斯基特张贴在Creating a DateTime in a specific Time Zone in c# fx 3.5转换日期时间为UTC仅如果尚未UTC
这不正是我的情况,因为它假定在构造函数中传递的日期时间是工作本地时间,因此使用指定的时区将其转换为Utc。
在我的情况下,我们将主要传递已经在Utc中的DateTime对象(因为这是我们正在存储的),所以如果源DateTime.Kind不是Utc,我们只需要执行转换。
所以我改变了构造函数:
public DateTimeWithZone(DateTime dateTime, TimeZoneInfo timeZone, DateTimeKind kind = DateTimeKind.Utc) {
dateTime = DateTime.SpecifyKind(dateTime, kind);
utcDateTime = TimeZoneInfo.ConvertTimeToUtc(dateTime, timeZone);
this.timeZone = timeZone;
}
在这里,我们有一个可选的各种参数,默认为UTC。
然而,运行此代码,并传递一个UTC日期时间产生以下异常:
转换无法完成,因为所提供的日期时间没有Kind属性设置正确。例如,当Kind属性为DateTimeKind.Local时,源时区必须为TimeZoneInfo.Local。
根据该文档(http://msdn.microsoft.com/en-us/library/bb495915.aspx):
如果日期时间参数的种类属性等于DateTimeKind.Utc和sourceTimeZone参数等于TimeZoneInfo.Utc,此方法返回日期时间,而不执行任何转换。
既然输入时间和时区都有一个Utc的Kind属性,那么我不希望得到这个异常。
我误解了吗?
是你的OS XP吗? – V4Vendetta 2011-05-27 10:25:28
不,在上面的例子中,它是Windows 7 – 2011-05-27 10:42:26