我正在尝试在传递给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'。
答案 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);