如何格式化DateTime或TimeZone / TimeZoneInfo以显示三个字母?

时间:2009-10-06 19:47:59

标签: c# .net datetime formatting ofx

我正在使用一个规范,该规范需要一种特殊的日期时间格式,但我还没有必要使用它。

在处理时,必须以下列格式标记OFX(1而非2)日期时间(DTCLIENT或DTSERVER):
    20071015021529.000

然而,在示例中显示:

20071015021529.000[-8:PST]    

第一个使用

语句的问题我没有问题
DateTime.Now.ToString("yyyyMMddHHmmss.fff")

我甚至可以弄清楚如何让%z获得正确的偏移。

三个字母的时区代码是我绊倒的地方。有没有一种简单的方法可以在.net中获取它,或者我最终会编写代码来输出和解析我需要的内容?

3 个答案:

答案 0 :(得分:5)

三个字母的时区代码在各个国家/地区并不是唯一的,并且不是完全标准化的。例如,“CST”可以是“中央标准时间(美国)”或“中国标准时间”的缩写。哪个是正确的取决于您的语言环境。

据我所知,.NET Framework中没有内置功能来查找这样的代码,因此您需要自己实现它。

此外(但您可能知道这一点),您需要注意如何实现此功能。 UTC偏移和时区代码之间不一定存在一对一的对应关系。例如,UTC-0700可以是美国山地标准时间(MST)美国太平洋夏令时(PDT)。

答案 1 :(得分:4)

如果您使用r,它将为您提供RFC格式。它会帮助你吗?

String.Format("{0:r}", dt);  // "Sun, 09 Mar 2008 16:05:07 GMT"   RFC1123

如果可以帮助您,您也可以check this SO link

答案 2 :(得分:2)

您需要准确找出所需的3个字母代码。例如,Europe/Paris会给出什么?就个人而言,我会将数据转换为UTC并将其格式化,除非您确实需要保留时区信息。