我有一个DateTime存储在世界时间(UTC)值2010-01-01 01:01:01。datetime与时区字符串
我想在EST这种格式2010-01-01 04显示出来:01:01GMT,04:00,但是 'K' 格式化的时区不工作的ToString
我有一个DateTime存储在世界时间(UTC)值2010-01-01 01:01:01。datetime与时区字符串
我想在EST这种格式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秒格林尼治标准时间06:00
我在CDT时区。确保DateTime明确DateTimeKind.Utc。
格林威治标准时间没有歧义夏时制。它不改变夏时制。 – 2015-12-05 01:40:27
我认为您正在寻找TimeZoneInfo
班(请参阅http://msdn.microsoft.com/en-us/library/system.timezoneinfo_members.aspx)。它有许多静态方法来转换时区之间的日期。
类似这样的工作。你也许可以清理多一点:
string newDate = string.Format("{0:yyyy-MM-dd HH:mm:ss} GMT {1}", dt.ToLocalTime(), dt.ToLocalTime().ToString("%K"));
你可能意味着'HH',而不是'hh'。 – Sasha 2017-03-06 10:42:34
可能......“hh”给出了12小时制结果,其中“HH”给出了军事时间结果。 – Robaticus 2017-03-07 13:31:52
Robaticus,我的意思是12小时格式与您答案的其余部分不兼容,因为您没有指定AM/PM。即应该加上't' /'tt'来使'hh'有意义(例如'02:00 AM','03:00 PM'),或者'hh'应该替换为'HH'来产生24小时格式(例如'02:00','15:00')。所以'yyyy-MM-dd hh:mm:ss'格式产生的模糊输出不能被解码回来:(。 – Sasha 2017-03-07 14:04:42
此方法将返回在东部标准时间指定时间(作为问题的要求),即使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文档。
@Sasha这是一个好点,这个答案之前并没有消除AM和PM之间的歧义。在时间格式字符串中添加“tt”以添加AM/PM。根据您的评论,您可以用“HH”替代“hh”以使用24小时制(从00到23)输出小时数。 – 2017-03-06 14:46:01
您是否有世界时(UTC)或格林威治标准时间(GMT)的时间? – Guffa 2010-07-23 23:46:55
对不起,错字 – Comma 2010-07-23 23:58:06