将日期时间转换为特定时区但采用特定格式 c#
Converting a datetime to a particular timezone but in a specific format c#
我不完全确定这是否可行,我已经尝试了很多方法,但没有编写算法。
我有一个 datetime 类型的变量,我想将其转换为特定时区和特定格式。我举个例子
todayCloseLine -> UTC time -> "2021-05-25 18:36:00"
closeline_local -> converting todayCloseLine to GMT Standard Time -> "2021-05-25 19:36:00"
我能够转换到给定的时区,所以没有问题。我想要的是 closeline_local
这种格式
2021-05-25T18:36:00.0000000+01:00
我的尝试如下(除其他外):
- 在 todayCloseLine 上尝试了 ToLocalTime().ToString("o") 但要使其正常工作,我的机器应该处于特定时区。这不是一个选项
现在,我能做的就是写一个算法如下:
- 根据哪个时间跨度大来计算时间跨度的差异
- 获取符号,+ 或 - 取决于哪个更大
- 然后将 todayCloseLine 转换为 ToString("o") 并附加符号和时间跨度以获得最终输出
但我想避免这种情况,最好使用内置方法或其他方法来进行此转换
如果你能帮忙,请。提前致谢。
编辑
这些是我做过的尝试。我尝试了其中的排列组合但没有成功
DateTime todayCloseLine1 = DateTime.SpecifyKind(Convert.ToDateTime("25-May-2021 18:36"), DateTimeKind.Utc);
var closeline_local1 = DateTime.SpecifyKind(TimeZoneInfo.ConvertTime(
todayCloseLine1,
TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time")), DateTimeKind.Local);
var dt1 = closeline_local1.ToLocalTime().ToString("o");
var dt2 = closeline_local1.ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffzzz");
OUTPUT for both dt1 and dt2 -
2021-05-25T19:36:00.0000000+05:30 --> machine date IST
2021-05-25T19:36:00.0000000+01:00 --> machine date LONDON
希望对您有所帮助
使用 DateTimeOffset
以所需格式格式化字符串
DateTime close_line_UTC = DateTime.SpecifyKind(Convert.ToDateTime("25-May-2021 18:36"), DateTimeKind.Utc);
var myTimeZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
var closeline_local = TimeZoneInfo.ConvertTimeFromUtc(close_line_UTC, myTimeZone);
TimeSpan utcOffsett = myTimeZone.GetUtcOffset(closeline_local);
DateTimeOffset dateTimeOffset = new DateTimeOffset(closeline_local, utcOffsett);
var closeline_local_formatted = dateTimeOffset.ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffzzz");
参考文献
我不完全确定这是否可行,我已经尝试了很多方法,但没有编写算法。
我有一个 datetime 类型的变量,我想将其转换为特定时区和特定格式。我举个例子
todayCloseLine -> UTC time -> "2021-05-25 18:36:00"
closeline_local -> converting todayCloseLine to GMT Standard Time -> "2021-05-25 19:36:00"
我能够转换到给定的时区,所以没有问题。我想要的是 closeline_local
这种格式2021-05-25T18:36:00.0000000+01:00
我的尝试如下(除其他外):
- 在 todayCloseLine 上尝试了 ToLocalTime().ToString("o") 但要使其正常工作,我的机器应该处于特定时区。这不是一个选项
现在,我能做的就是写一个算法如下:
- 根据哪个时间跨度大来计算时间跨度的差异
- 获取符号,+ 或 - 取决于哪个更大
- 然后将 todayCloseLine 转换为 ToString("o") 并附加符号和时间跨度以获得最终输出
但我想避免这种情况,最好使用内置方法或其他方法来进行此转换
如果你能帮忙,请。提前致谢。
编辑
这些是我做过的尝试。我尝试了其中的排列组合但没有成功
DateTime todayCloseLine1 = DateTime.SpecifyKind(Convert.ToDateTime("25-May-2021 18:36"), DateTimeKind.Utc);
var closeline_local1 = DateTime.SpecifyKind(TimeZoneInfo.ConvertTime(
todayCloseLine1,
TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time")), DateTimeKind.Local);
var dt1 = closeline_local1.ToLocalTime().ToString("o");
var dt2 = closeline_local1.ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffzzz");
OUTPUT for both dt1 and dt2 -
2021-05-25T19:36:00.0000000+05:30 --> machine date IST
2021-05-25T19:36:00.0000000+01:00 --> machine date LONDON
希望对您有所帮助
使用 DateTimeOffset
以所需格式格式化字符串
DateTime close_line_UTC = DateTime.SpecifyKind(Convert.ToDateTime("25-May-2021 18:36"), DateTimeKind.Utc);
var myTimeZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
var closeline_local = TimeZoneInfo.ConvertTimeFromUtc(close_line_UTC, myTimeZone);
TimeSpan utcOffsett = myTimeZone.GetUtcOffset(closeline_local);
DateTimeOffset dateTimeOffset = new DateTimeOffset(closeline_local, utcOffsett);
var closeline_local_formatted = dateTimeOffset.ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffzzz");
参考文献