为了账号安全,请及时绑定邮箱和手机立即绑定

替换时区。

替换时区。

C#
肥皂起泡泡 2021-06-02 17:50:37
我们正在尝试构建基本的事件日历功能,允许用户创建事件并指定给定月、日、年、小时和分钟以及时区 ( System.TimeZoneInfo.Id)的开始时间。CMS 系统System.DateTime根据我们服务器的位置生成结果,比如说TimeZoneInfo.Id Mountain Standard Time。CMS 不提供带有日期选择器组件的选项来指定时区。然而,我们确实可以控制 SQL 日期时间精度,默认情况下设置为7.在DateTime被格式化为yyyyMMddTHHmmssZ为的在填充.ICS开始/结束时间/ iCal的目的。使用这种格式,它使 2018 年 5 月 25 日晚上 7 点 ( 20180508T192840Z) 始终看起来像服务器的山地标准时间 (MST),而不是所选东部标准时间 (EST) 中的 2018 年 5 月 25 日晚上 7 点。我怎么能“替代”的时区DateTime是在不改变年/月/日/小时/分钟或者产生DateTime,DateTimeOffset,TimeZoneInfo,NodaTime,甚至string功能,格式转换成yyyyMMddTHHmmssZ?以下:TimeZoneInfo destinationTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");var converted = TimeZoneInfo.ConvertTime(dateTime1, destinationTimeZone);或者:LocalDateTime fromLocal = LocalDateTime.FromDateTime(dateTime1);DateTimeZone fromZone = DateTimeZoneProviders.Tzdb["America/Denver"];ZonedDateTime fromZoned = fromLocal.InZoneLeniently(fromZone);DateTimeZone toZone = DateTimeZoneProviders.Tzdb["America/Chicago"];ZonedDateTime toZoned = fromZoned.WithZone(toZone);LocalDateTime toLocal = toZoned.LocalDateTime;var result = toLocal.ToDateTimeUnspecified();创建一个新DateTime的小时,从 CST 调整为 EST,这不起作用,因为目标是DateTime使用原始小时值但使用TimeZoneInfo.Id 东部标准时间。DateTime构造函数似乎没有指定的构造函数TimeZoneInfo,只有DateTimeKind.这怎么能用一些甚至诸如DateTimecreated from来完成DateTime.Now?
查看完整描述

2 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

DateTimetype 不知道时区,它知道的关于时区的一切都是 a DateTimeKind,可以是Local,Utc或Unspecified。包含在字符串表示中的区域信息将基于Kind值和服务器时区。


您应该DateTimeOffset在您的场景中使用,该场景将日期时间和时区信息存储在一个值中:


var dateTime = DateTime.Now; /*your date time here*/

var destinationTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

var zonedDateTime = new DateTimeOffset(DateTime.SpecifyKind(dateTime, DateTimeKind.Unspecified), destinationTimeZone.BaseUtcOffset);

var dateTimeStr = zonedDateTime.ToString("o"/*your format goes here*/);


查看完整回答
反对 回复 2021-06-05
  • 2 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信