如何在日期格式字符串上指定时区?

时间:2009-04-09 14:08:40

标签: c#

我正在尝试在传递给DateFormat.parse的字符串上指定时区。我们目前正在使用.net framework 2.0。目前的代码是

DateTimeFormatInfo DATE_FORMAT = CultureInfo.CurrentCulture.DateTimeFormat;
DateTime first = DateTime.Parse("Wed, 31 Oct 2007 8:00:00 -5", DATE_FORMAT);

但是当我做first.ToString("r")时,结果是

Wed, 31 Oct 2007 09:00:00 GMT

我做错了什么?我还尝试使用DateTime.SpecifyKind方法将我的DateTime对象的Kind设置为Local,但是如果时区是字符串的一部分,看起来你需要在解析字符串之前将类型指定为local。

我当地的时区是美国东部时间,这就是我最终想要的日期。

编辑 - 我们的解决方案:

输入:

DateTime first = DateTime.SpecifyKind(DateTime.Parse("OCT 31, 2007 8:00 AM", DATE_FORMAT), DateTimeKind.Local);

输出:

first.ToLocalTime().ToString("our format")

还没有找到获得时区缩写的方法,比如'EDT'。

5 个答案:

答案 0 :(得分:2)

在致电ToString()之前使用ToLocalTime()方法。

first.ToLocalTime().ToString();

答案 1 :(得分:1)

您可以使用“zz”或“zzz”日期格式为-5或-5:00。

答案 2 :(得分:1)

当你先叫.ToString(“ r ”),

以下是基于MSDN的内容

  

表示自定义日期和时间   格式字符串由。定义   的DateTimeFormatInfo .. ::。RFC1123Pattern   属性。该模式反映了一个   定义标准,属性是   只读。因此,它始终是   同样,无论使用何种文化   或提供的格式提供程序。该   自定义格式字符串是“ddd,dd MMM   yyyy HH':​​'mm':'ss'GMT'“。

您可以将定义的格式信息传递给ToString,尝试调用此方法

DateTime .. ::。ToString方法(IFormatProvider)

相反,传递你的DateTimeFormatInfo对象。

答案 3 :(得分:0)

看看DateTimeOffset结构,我认为这就是你需要的。

答案 4 :(得分:0)

尝试使用ParseExact() - 你可以指定去哪里。

在您的情况下,您可以使用以下方法解析它:

        string str = "Wed, 31 Oct 2007 8:00:00 -5";
        string fmt = "ddd, dd MMM yyyy H:mm:ss z";

        DateTime d = DateTime.ParseExact(str, fmt, null);
        Console.WriteLine(d);