Я использую Noda Время для преобразования local datetime в UTC..NET Noda Time Converting 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();
}
Проблема с Daylight Savings: Когда часы идет 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' - ваш друг. –