datetime to string with time zone

前端 未结 5 810
礼貌的吻别
礼貌的吻别 2020-11-30 03:50

I have a DateTime stored in universal time (UTC) of value 2010-01-01 01:01:01.

I would like to display it in EST in this format 2010-01-01 0

相关标签:
5条回答
  • 2020-11-30 03:57

    Use the "zzz" format specifier to get the UTC offset. For example:

            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);
    

    Output: 2009-12-31 19:01:01 GMT-06:00

    I'm in the CDT timezone. Make sure the DateTime is unambiguously DateTimeKind.Utc.

    0 讨论(0)
  • 2020-11-30 04:07

    If like myself you happen to need a format like 2018-03-31T01:23:45.678-0300 (no colon in the timezone part), you can use this:

    datetime.ToString("yyyy-MM-ddTHH:mm:ss.fffzzz").Remove(26,1)
    
    0 讨论(0)
  • 2020-11-30 04:11

    I think you are looking for the TimeZoneInfo class (see http://msdn.microsoft.com/en-us/library/system.timezoneinfo_members.aspx). It has many static methods to convert dates between time zones.

    0 讨论(0)
  • 2020-11-30 04:16

    Something like this works. You could probably clean it up a bit more:

    string newDate = string.Format("{0:yyyy-MM-dd HH:mm:ss} GMT {1}", dt.ToLocalTime(), dt.ToLocalTime().ToString("%K"));
    
    0 讨论(0)
  • 2020-11-30 04:18

    This method will return the specified time in Eastern Standard Time (as the question requested), even if EST is not the local time zone:

    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");
    }
    

    Note: I haven't tested this in a non-English OS. See the MSDN documentation on TimeZoneInfo.FindSystemTimeZoneById.

    0 讨论(0)
提交回复
热议问题