У меня есть локальное время в строчном формате: «yyyy-MM-dd HH: mm: ss» и часовой пояс IANA за это время (например, «Европа/Лондон ").Как преобразовать зону IANA + дата-время в UTC + Смещение с использованием NodaTime
Как преобразовать, что в C#, может быть, с помощью NodaTime, к UTC + TimeZone Смещение строки
например "yyyy-MM-dd HH: mm: ss + 01: 00"?
Я даже не знаю с чего начать!
Это насколько я могу (я боюсь, что я новичок в C sharp): Я понимаю, что мне нужно преобразовать его в одно мгновение, но просто не могу получить доступ к библиотеке.
string dateTime = "2014-12-31 12:30:00";
string IANA = "Europe/London";
Instant instDateTime = NodaTime.Instant.FromDateTimeUtc(Convert.ToDateTime(dateTime));
string outputUTC = string.Format("yyyy-MM-dd HH:mm:ssZ", instDateTime);
Благодаря Matt (см ответить ниже), теперь у меня есть функции, необходимые мне (Обратите внимание, что в конце концов, что мне было нужно UTC, а не время дата + смещение):
Что такое мало беспокоит то, что говорит, что Европа/Москва UTC + 04: 00, в то время как на самом деле UTC + 03: 00 начиная с 26 октября 2014 г.
static void Main(string[] args)
{
string dateTime = "2014-12-31T12:30:00";
string timeZone = "Europe/Moscow";
Console.WriteLine(timeZone + " Local time '" + dateTime + "' to Zulu time");
Console.WriteLine(ConvertIANALocalTimeToZulu(timeZone, dateTime));
Console.WriteLine();
Console.WriteLine("Zulu time '" + dateTime + "' to " + timeZone + " local time");
Console.WriteLine(ConvertZuluTimeToIANALocalTime(timeZone, dateTime));
Console.ReadLine();
}
static string ConvertIANALocalTimeToZulu(string timeZoneIANA, string localDateTime)
{
var pattern = LocalDateTimePattern.CreateWithInvariantCulture("yyyy-MM-ddTHH:mm:ss");
LocalDateTime ldt = pattern.Parse(localDateTime).Value;
ZonedDateTime zdt = ldt.InZoneLeniently(DateTimeZoneProviders.Tzdb[timeZoneIANA]);
Instant instant = zdt.ToInstant();
ZonedDateTime zulu = instant.InUtc();
////string output = zulu.ToString("yyyy-MM-dd HH:mm:sso<m>", CultureInfo.InvariantCulture);
string output = zulu.ToString("yyyy-MM-ddTHH:mm:ss", CultureInfo.InvariantCulture);
return output;
}
static string ConvertZuluTimeToIANALocalTime(string timeZoneIANA, string zuluDateTime)
{
var pattern = InstantPattern.CreateWithInvariantCulture("yyyy-MM-ddTHH:mm:ss");
Instant instant = pattern.Parse(zuluDateTime).Value;
ZonedDateTime zdt = instant.InZone(DateTimeZoneProviders.Tzdb[timeZoneIANA]);
////string output = zdt.ToString("yyyy-MM-dd HH:mm:sso<m>", CultureInfo.InvariantCulture);
string output = zdt.ToString("yyyy-MM-ddTHH:mm:ss", CultureInfo.InvariantCulture);
return output;
}
Начните с кода для публикации. Даже ужасно сломанный код позволяет кому-то помочь вам в течение первого препятствия, которое вы не поняли. – bmike
Показать приличное усилие, и кто-то поможет вам! – mybirthname
Я прочитал это сообщение в отношении преобразования текста из IANA в Windows, но я не понимаю, что здесь происходит. [iana to conversion time zone conversion] (http://stackoverflow.com/questions/17348807/how-to-translate-between-windows-and-iana-time-zones) –