繁体   English   中英

datetime to string with time zone

[英]datetime to string with time zone

我有一个DateTime以通用时间(UTC)存储,值为2010-01-01 01:01:01

我想以这种格式在美国东部时间2010-01-01 04:01:01GMT-04:00中显示它,但是时区的'K'格式化器在ToString中不起作用

使用“zzz”格式说明符获取UTC偏移量。 例如:

        var dt = new DateTime(2010, 1, 1, 1, 1, 1, DateTimeKind.Utc);
        string s = dt.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss \"GMT\"zzz");
        Console.WriteLine(s);

输出:2009-12-31 19:01:01 GMT-06:00

我在CDT时区。 确保DateTime是明确的DateTimeKind.Utc。

像这样的东西有效。 你可以把它清理一下:

string newDate = string.Format("{0:yyyy-MM-dd HH:mm:ss} GMT {1}", dt.ToLocalTime(), dt.ToLocalTime().ToString("%K"));

如果像我一样你碰巧需要像2018-03-31T01:23:45.678-0300这样的格式(时区部分没有冒号),你可以使用:

datetime.ToString("yyyy-MM-ddTHH:mm:ss.fffzzz").Remove(26,1)

即使EST不是本地时区 ,此方法也会在东部标准时间(如请求的问题)返回指定时间:

public string GetTimeInEasternStandardTime(DateTime time)
{
    TimeZoneInfo easternStandardTime = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
    DateTimeOffset timeInEST = TimeZoneInfo.ConvertTime(time, easternStandardTime);
    return timeInEST.ToString("yyyy-MM-dd hh:mm:ss tt\" GMT\"zzz");
}

注意:我没有在非英语操作系统中测试过这个。 请参阅有关TimeZoneInfo.FindSystemTimeZoneById的MSDN文档。

我认为您正在寻找TimeZoneInfo类(请参阅http://msdn.microsoft.com/en-us/library/system.timezoneinfo_members.aspx )。 它有许多静态方法可以在时区之间转换日期。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM