【发布时间】:2015-02-26 19:24:00
【问题描述】:
我有字符串格式的本地时间:“yyyy-MM-dd HH:mm:ss”和那个时间的 IANA 时区(例如“欧洲/伦敦”)。
如何在 C# 中(可能使用 NodaTime)将其转换为 UTC+TimeZone 偏移字符串
例如"yyyy-MM-dd HH:mm:ss+01:00" ?
我什至不知道从哪里开始!
据我所知(恐怕我是升 C 的新手): 我知道我需要将其转换为即时,但无法掌握图书馆。
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,而实际上自 2014 年 10 月 26 日以来是 UTC+03:00。
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;
}
【问题讨论】:
-
从发布代码开始。即使是非常糟糕的代码也可以让别人帮助你克服你没有清除的第一个障碍。
-
表现出体面的努力,有人会帮助你!
-
我已阅读这篇关于将文本从 IANA 转换为 Windows 的帖子,但我不明白这里发生了什么。 iana to windows time zone conversion
-
@PaulPanayis - 这个问题是关于 IANA 时区系统和 Microsoft Windows 时区系统之间的转换 - 这不是您在帖子中似乎感兴趣的内容。阅读the timezone tag wiki了解更多详情。
标签: c# datetime utc nodatime iana