解析自定义DateTime字符串

时间:2015-02-03 20:38:48

标签: c# datetime

我试图使用ParseExact()方法将字符串解析为DateTime。

string input = "Wednesday, March 4, 2015 - 9:00 AM PST";
string format = @"dddd, MMMM d, yyyy - h:mm tt \P\S\T";

使用此格式解析此输入失败,但我无法理解为什么错误。

如果我这样做

Console.WriteLine(DateTime.Now.ToString(format));

然后我得到一个与上面输入格式相同的输出。所以这表明格式确实是正确的。

欣赏你的想法 - Saqib

2 个答案:

答案 0 :(得分:4)

当前的区域设置问题(或更具体地说是星期/月翻译日):

var ok = DateTime.ParseExact(
     "Wednesday, March 4, 2015 - 9:00 AM PST", "dddd, MMMM d, yyyy - h:mm tt PST",
      new CultureInfo("en-us"))
var failed = DateTime.ParseExact(
     "Wednesday, March 4, 2015 - 9:00 AM PST", "dddd, MMMM d, yyyy - h:mm tt PST",
      new CultureInfo("de-de"))

答案 1 :(得分:0)

目前,您的示例代码不会编译,因为转义字符' \'本身需要逃脱。或者,您可以在格式字符串前加上' @'使它成为文字。

以下作品;

string input = "Wednesday, March 4, 2015 - 9:00 AM PST";
string format = @"dddd, MMMM d, yyyy - h:mm tt \P\S\T";
DateTime dt = DateTime.ParseExact(input, format, null, DateTimeStyles.AssumeLocal);

但是,您需要知道DateTime实例不包含时区信息,因此结果将被假定为本地时间(这就是我在ParseExact调用中明确说明的原因),以及' PST'无论如何都不被识别为时区,即使你使用DateTimeOffset类型(它确实包含TimeZone细节)