为什么这个DateTime.ParseExact调用会失败?

3
var dateValue = "Mon, 02 May 2016 12:00 PM EDT";
var date = DateTime.ParseExact(
   dateValue,
   "ddd, dd MMM yyyy hh:mm tt K",
   System.Globalization.CultureInfo.InvariantCulture);

据我所知,根据官方的格式字符串文档,应该可以这样解决。但实际上,会抛出System.FormatException异常,并显示一条不太有用的消息:String was not recognized as a valid DateTime。 是否有办法弄清楚出了什么问题?

3
文档中没有提到 K 接受时区字符串作为输入,所以这可能是你的问题。 - Sami Kuhmonen
@SamiKuhmonen,请在文档中查找以下句子:“更多信息:‘K’自定义格式说明符。”和“‘K’自定义格式说明符”。那里有关于‘K’的良好描述。 - Siyavash Hamdi
3个回答

1

K 自定义格式说明符 不接受时区字符串。

如果您可以提供小时偏移量而不是字符串,则可以使用 "z"

var dateValue = "Mon, 02 May 2016 12:00 PM -4";
var date = DateTime.ParseExact(
   dateValue,
   "ddd, dd MMM yyyy hh:mm tt z",
   System.Globalization.CultureInfo.InvariantCulture);

很遗憾,我无法提供小时偏移量。这个时间戳字符串是从 Web 服务中原样获取的。但至少我可以使用 .substring() 去掉时区字符串... - Mason Wheeler
真遗憾。Sami在你的问题评论中分享的链接可能有一些有用的东西。 - Gabriel Luci

0

这应该可以工作

var dateValue = "Mon, 02 May 2016 12:00 PM EDT".Replace("EDT", "-4");
var date = DateTime.ParseExact(
dateValue,
"ddd, dd MMM yyyy hh:mm tt z",
System.Globalization.CultureInfo.InvariantCulture);

0

https://msdn.microsoft.com/zh-cn/library/shx7s921%28v=vs.110%29.aspx指定 DateTime.Kind 枚举有三个成员,因此可能不喜欢您将“EDT”指定为一种。

 Member name    Description
 Local          The time represented is local time.
 Unspecified    The time represented is not specified as either local time or Coordinated Universal Time (UTC).
 Utc            The time represented is UTC.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接