我对此日期有疑问(来自" Jira" REST API结果 - > Worklog->已启动字段),它会返回我预期的不同结果。
问题:
您能否提供正确的方法将其转换为正确的时间?
答案 0 :(得分:2)
它是一种ISO格式 - 最优选和不明确的日期格式,代表特定时区的一个时刻。
2017-06-20T22:09:00.000-0400
代表2017年6月20日22:09 PM时区GMT -4。
ISO格式被大多数语言正确解析,包括C#。
您在代码中获得其他价值的原因是因为您位于格林威治标准时间+8,当地时间是6月21日上午10:09,格林威治标准时间-4月6月20日晚上22:09。
这是绝对有效和预期的行为。
答案 1 :(得分:0)
时间和GMT抵消经常导致混乱。
首先,它是什么,它是在这里的8:15"意思?格林威治标准时间?伦敦?别的地方?其次," GMT + 2"意思?
在第一种情况下,诚实的答案是没有更多的背景可以告诉你。在第二种情况下,更多的是人们误解GMT补偿 - 许多人认为" GMT ==伦敦"所以" GMT + 2 ==伦敦+ 2" - 当然不正确," GMT ==伦敦冬天; BST(GMT + 1)==伦敦夏季"。所以" GMT + 2"是" GMT + 2",即夏天的柏林或冬天的尼科西亚。
由于这些原因,许多情况下,时间很重要,使用GMT或其他时区,但明确说明偏移,例如" 3:15 am,EDT"。
要回答您的问题,您有几个选择
像这样的东西
DateTimeOffset date = new DateTimeOffset(2017, 6, 20, 22, 09, 0, 0, TimeSpan.FromHours(-4));
// 20 June 2017, 22:09, GMT-4
public static DateTimeOffset ParseIso8601(string iso8601String)
{
return DateTimeOffset.ParseExact(
iso8601String,
new string[] { "yyyy-MM-dd'T'HH:mm:ss.FFFK" },
CultureInfo.InvariantCulture,
DateTimeStyles.None);
}