gpt4 book ai didi

.net - TimeZoneInfo.ConvertTime 不转换任何东西

转载 作者:行者123 更新时间:2023-12-04 17:41:05 27 4
gpt4 key购买 nike

使用 .net 4.0 在 win 7 上运行 asp.net mvc 2

我有一个从表单接收 2 个 DateTime 对象的 Controller 操作方法。表单上的 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) 来实现这一点,就可以了。但后来在路上,我需要这个应用程序更加灵活。

最佳答案

如果您想要更灵活的方法,请尝试以下操作:

 DateTime now = DateTime.UtcNow;

TimeZoneInfo timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time");
TimeSpan utcOffset = timeZoneInfo.GetUtcOffset(now);
DateTime hawaiianTime = new DateTime(now.Ticks + utcOffset.Ticks, DateTimeKind.Local);

无论您使用什么时区,这都应该正常工作。顺便说一句:如果我是你,我会将开始和结束日期创建为 DateTimeKind.Utc(并将所有计划数据也存储为 UTC)。我不确定 GetUtcOffset() 将如何处理未指定的时间类型...

GetUtcOffset() 更新

对于使用不同 DateTimeKind 值创建的 DateTimes,GetUtcOffset() 似乎完全相同。但是,我还没有使用无效输入(即由于夏令时切换而不存在的日期)对其进行测试。我相信 DateTimeKind.Utc 在这里相当节省,但它可能用于本地或未指定。

关于.net - TimeZoneInfo.ConvertTime 不转换任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3740138/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com