【问题标题】:Java Datetime format parsed in C#在 C# 中解析的 Java 日期时间格式
【发布时间】:2014-09-16 14:46:30
【问题描述】:

我被告知我将收到格式如下的日期时间:

yyyy-mm-ddThh:mm:sss

这来自 Java Web 服务,即使我试图了解最后三个“sss”的意义,它似乎是最终格式,而不是拼写错误。

所以我正在尝试使用 .Net(实际上是 C#)解析它

var s = "2014-09-16T12:17:057";
var d = DateTime.ParseExact(s, "yyyy-MM-ddThh:mm:sss", CultureInfo.InvariantCulture);

但它引发了一个异常

Sting 未被识别为有效的日期时间

谢谢,

更新:

和我怀疑的一样,第三次魅惑我已经确认实际格式应该是

yyyy-MM-ddTHH:mm:ss

【问题讨论】:

  • 您想访问什么网络服务?他们可能会解释如何在某处使用它。
  • @mitomed,小写 ss 表示秒,但仅限于两位数,大写 SSS 表示毫秒。因此,请确保您被告知的格式正确。

标签: c# datetime-format


【解决方案1】:

查看Java date format documentation,我相信您会在字符串的秒部分通过059 收到000。此外,Java 似乎能够提供十分之一秒。

您指定的符号字母的数量也决定了格式。

号码 |最少位数是必需的 |较短的数字用零填充

因此将其解析为 ssf 将导致时间的秒部分除以 10。

如果是这种情况,那么你需要使用的C#格式字符串是yyyy-MM-ddTHH:mm:0ss

也就是说,您的“Java 格式字符串”包含月份和分钟的 mm 和小时(12 小时)的 hh,没有任何 AM/PM 说明符的指示,所以谁知道它有多可靠?

【讨论】:

  • 你是对的。这是一团糟。我会坚持向给我发送此信息的第三方(即使我已经两次确认了这一点)其中没有错字。
  • @Rawling,虽然在您的链接文档中有一个问题: "H:mm:ss:SSS 8:28:36:249" ,所以秒值不完全在000 to 059 之间。 SSS 是毫秒,可能是秒和毫秒的大写小写差异。
  • @Habib 我不关注。多个s 是秒,多个S 是毫秒。比要求更多的sS 会给出前导零。因此,在您的示例中,ss 给出了36SSS 给出了249sss 会给036
  • @Rawling,“比所需更多的 s 或 S 给出前导零” - 这就是我错过的。你是绝对正确的。 +1
猜你喜欢
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 2014-06-11
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多