【发布时间】:2021-08-21 17:51:22
【问题描述】:
我不完全确定这是否可能,我已经尝试了很多方法,但没有编写算法。
我有一个日期时间类型的变量,我想将其转换为特定时区和特定格式。举个例子吧
todayCloseLine -> UTC 时间 -> "2021-05-25 18:36:00"
closeline_local -> 将 todayCloseLine 转换为 GMT 标准时间 -> "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
希望对你有帮助
【问题讨论】:
-
如果您的客户接受 ISO8601 格式,那么偏移部分是什么无关紧要,只需向他们发送 UTC 时间即可。
-
不太确定是什么阻碍了您。你的意思是你想要
closeline_local.ToString("yyyy-MM-dd'T'HH:mm:ss.FFFFFFFzzz")? -
你能发布你的示例代码吗?
-
这是不可能的,
zzz格式说明符为您提供了与 UTC 的偏移量,因此我们确实需要查看您的其余代码以了解为什么您首先会得到这样的时间。 -
使用
DateTimeOffset类。它将转换为正确包含偏移后缀的字符串。
标签: c# .net datetime datetimeoffset