我們正在嘗試構建基本的事件日歷功能,允許用戶創建事件并指定給定月、日、年、小時和分鐘以及時區 ( 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*/);
- 2 回答
- 0 關注
- 174 瀏覽
添加回答
舉報
0/150
提交
取消