【发布时间】:2010-09-18 02:25:47
【问题描述】:
使用 .net 4.0 在 win 7 上运行 asp.net mvc 2
我有一个控制器操作方法,它从一个表单接收 2 个 DateTime 对象。表单上的 UI 使用 jQueryUi 日期选择器(不确定是否适用)。
填写该表格的用户将始终输入夏威夷时区的日期/时间。
我想将其转换为 UTC 时间并将其存储在数据库中。
当我调用 TimeZoneInfo.ConverTime(DateTime,TimeZoneInfo,TimeZoneInfo) 时,它返回的日期时间与我传递给它的日期时间完全相同,而无需进行任何转换。我检查了调试器,唯一改变的是将 DateTime.Kind 属性更改为 DateTimeKind.Utc。
public ActionResult New(ScheduleNew data){
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById( "Hawaiian Standard Time" );
DateTime start = TimeZoneInfo.ConvertTime(data.StartDate, tz, TimeZoneInfo.Utc);
DateTime end = TimeZoneInfo.ConvertTime(data.EndDate, tz, TimeZoneInfo.Utc);
}
我也尝试了另一个版本,结果相同。
public ActionResult New(ScheduleNew data){
DateTime start = new DateTime( data.StartDate.Year, data.StartDate.Month, data.StartDate.Day, data.StartDate.Hour, data.StartDate.Minute, data.StartDate.Second, DateTimeKind.Unspecified );
DateTime end = new DateTime( data.EndDate.Year, data.EndDate.Month, data.EndDate.Day, data.EndDate.Hour, data.EndDate.Minute, data.EndDate.Second, DateTimeKind.Unspecified );
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById( "Hawaiian Standard Time" );
StartDate = TimeZoneInfo.ConvertTime(start, tz, TimeZoneInfo.Utc);
EndDate = TimeZoneInfo.ConvertTime(end, tz, TimeZoneInfo.Utc),
}
ScheduleData 只是一个简单的 ViewModel 类,具有两个日期时间属性,分别称为 StartDate 和 EndDate。
我要强调的是,我不在乎服务器在哪里,我不在乎用户在哪里。用户将始终输入夏威夷时区的时间,并且服务器应始终将该日期时间转换为 UTC。
基本上我想要的是在用户输入的时间上增加 10 小时(夏威夷到 utc),我可以通过调用 .AddHours(10) 来实现,这很好。但在以后的道路上,我需要这个应用程序更加灵活。
【问题讨论】:
-
问题解决了吗?
-
数据类型是什么。开始日期?
标签: .net datetime asp.net-mvc-2 timezone