我希望DateTime a = Convert.ToDateTime(DateTime.UtcNow.ToString("s") + "Z");
采用以下格式。
2018-05-29T09:16:59Z
输出:
subtract
我希望距离这个时间{4}小时var result = a.AddHours(-4);
。所以我使用了这行代码:
29-05-2018 10:52:51
现在,不仅显示错误的时间,上述格式也受到干扰。
2018-05-29T05:16:59Z
预期输出:
{{1}}
答案 0 :(得分:1)
要让UTCNow减去你想做的4小时:
var fourHoursAgo = DateTime.UtcNow.AddHours(-4);
Console.WriteLine("fourHoursAgo: " + fourHoursAgo.ToString("yyyy-MM-ddTHH:mm:ssK"));
这将产生如下输出:
2018-05-29T05:36:18Z
这基本上是ISO 8601格式,非常类似于DateTime.ToString(“s”),但包括时区(在这种情况下为“Z”。)
答案 1 :(得分:0)
我认为您在这里遇到的问题是不同时区之间的转换:
//Saves the time in your own timezone
DateTime a = Convert.ToDateTime(DateTime.UtcNow.ToString("s") + "Z");
var result = a.AddHours(-4);
//1h @ middle europe (berlin,...)
Console.WriteLine("Local Timezone offset: " + TimeZoneInfo.Local.BaseUtcOffset);
//not mentioned above: + 1h daylight saving time in germany
//local times
System.Console.WriteLine("local:\t\t" + a.ToString("s")); //2018-05-29T12:34:26
System.Console.WriteLine("local -4h:\t" + result.ToString("s")); //2018-05-29T08:34:26
//utc times
System.Console.WriteLine("utc:\t\t" + DateTime.UtcNow.ToString("s")); //2018-05-29T10:34:26
var utctime = TimeZoneInfo.ConvertTime(result, TimeZoneInfo.Utc);
System.Console.WriteLine("utc -4h:\t" + utctime.ToString("s")); //2018-05-29T06:34:26
如您所见,第一行保存您的日期并在当地时区ToString("s")
上返回,而不是在utc时区。这很可能导致混淆,因为你有一个utc时间格式作为输入。
我来自德国并获得当地时区UTC +01:00h。
有关详细信息,请参阅this answer.