【发布时间】:2016-06-14 15:33:59
【问题描述】:
我正在使用 Noda Time 将 local datetime 转换为 UTC。
这是我目前所拥有的:
static string LocalTimeToUTC(string timeZone, string localDateTime)
{
var pattern = LocalDateTimePattern.CreateWithInvariantCulture("dd/MM/yyyy HH:mm:ss");
LocalDateTime ldt = pattern.Parse(localDateTime).Value;
ZonedDateTime zdt = ldt.InZoneLeniently(DateTimeZoneProviders.Tzdb[timeZone]);
Instant instant = zdt.ToInstant();
ZonedDateTime utc = instant.InUtc();
string output = utc.ToString("dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
return output;
}
static void Main(string[] args)
{
foreach (DateTime d in myDates)
{
DateTime utcTime = Convert.ToDateTime(LocalTimeToUTC("Europe/Amsterdam", d.ToString()));
Console.WriteLine(utcTime);
}
Console.ReadKey();
}
问题在于夏令时:当时钟倒退 1 小时时。缺少一个小时,请参阅下面的结果。
25/10/2014 19:00:00
25/10/2014 20:00:00
25/10/2014 21:00:00
25/10/2014 22:00:00
25/10/2014 23:00:00
26/10/2014 01:00:00
26/10/2014 02:00:00
如您所见,由于时钟更改,缺少 26/10/2014 00:00:00。
我的问题是,有没有办法处理这个问题,以免错过时间?填补缺失的小时数?
【问题讨论】:
-
顺便说一句,这里不需要通过文本解析 -
LocalDateTime.FromDateTime是你的朋友。
标签: c# .net datetime utc nodatime