【发布时间】:2011-06-19 21:05:49
【问题描述】:
我的表中有一个 varchar 数据类型的字段,其中包含 1800+0100 的时间,我怎样才能像格林威治标准时间 19:00 这样显示它?是否有任何 C# 方法将时间作为 1800+0100 并转换为 19:00?
提前致谢。任何帮助将不胜感激。
【问题讨论】:
-
1800+0100 实际上是 17:00 GMT,不是 19:00。
我的表中有一个 varchar 数据类型的字段,其中包含 1800+0100 的时间,我怎样才能像格林威治标准时间 19:00 这样显示它?是否有任何 C# 方法将时间作为 1800+0100 并转换为 19:00?
提前致谢。任何帮助将不胜感激。
【问题讨论】:
DateTime 类支持Add methods 用于DateTime 对象。您可以通过添加所需的任何时间单位将一个时间转换为另一个时间。
【讨论】:
您可以为此使用DateTimeOffset。您从时间和偏移量的constructing 实例开始,然后获取UtcDateTime 属性。
【讨论】:
如果您的时间实际上是在ISO-8601 format,那么您可以这样做:
DateTime dt = DateTime.ParseExact("1800+0100", "HHmmzzz", null,
DateTimeStyles.AdjustToUniversal);
Console.WriteLine(dt.TimeOfDay); // 17:00:00
但请注意,这(正确)输出 "17:00:00",而不是 "19:00:00"。
如果您的字符串不是 ISO-8601 格式 - 并且 "1800+0100" 确实意味着表示 19:00 GMT - 那么您需要手动解析字符串,或者在将其传递给ParseExact 之前对其进行预处理。可能是这样的:
string s = "1800+0100";
string temp = s.Substring(0, 4) + ((s[4] == '+') ? '-' : '+') + s.Substring(5);
DateTime dt = DateTime.ParseExact(temp, "HHmmzzz", null,
DateTimeStyles.AdjustToUniversal);
Console.WriteLine(dt.TimeOfDay); // 19:00:00
【讨论】:
请注意,英国仅在冬季使用 GMT(通用时间),而在夏季使用夏季时间。
【讨论】: