【问题标题】:Converting Java Date string into C# DateTime [duplicate]将 Java 日期字符串转换为 C# DateTime [重复]
【发布时间】:2012-12-05 01:27:36
【问题描述】:

可能重复:
Parse DateTime with timezone of form PST/CEST/UTC/etc

好的,我在 Java 中有以下代码,可以将我的 Date 对象转换为字符串:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss zzz");
String str = dateFormat.format(new Date());
// outputs: 2012-12-17 15:44:57 CST

我通过线路将该字符串发送到用 C# 编写的 WebService。那么,考虑到以下不起作用,我将如何将该字符串解析回有效的 DateTime,因为 C# 中的 zzz 是不同的:

DateTime.ParseExact(parts[2], "yyyy-MM-dd HH:mm:ss zzz", CultureInfo.InvariantCulture.DateTimeFormat);

在任何人建议之前 - 我知道我可以使用 UTC 时间,但我需要这样做。

有什么想法吗?

【问题讨论】:

  • 可能重复 hereherehere
  • 为什么你需要这样做?调用网络服务时,为什么不将日期转换为您想要的任何格式?

标签: c# java datetime


【解决方案1】:

CST 不是有效的 .NET 时区标识符。

在 .NET 中,这些都是数字偏移量 - +0700-0500 等...

如果您希望 .NET 对其进行解析,则需要输出一个数字时区偏移量。

我建议在Java中使用yyyy-MM-dd HH:mm:ss Z,可以看到here

另一种方法是使用string.ReplaceCST 转换为-0600,但这两者都不可扩展,并且可能会因命名时区的模糊性而失败(CST 可能意味着不同的时区,具体取决于您所在的位置) .

【讨论】:

  • 你显然没有读过这部分:“那么,我如何将该字符串解析回有效的 DateTime 考虑到以下不起作用,因为 C# 中的 zzz 不同"
  • @kape123 - 您可以将 Java 更改为使用 Z 而不是 zzz,或者在 C# 中将命名时区转换为它们的等效数字(尽管命名时区不明确)
  • 不知道 Z - 谢谢!所以Java方面的Z,C#方面的zzz,它完美地工作。
猜你喜欢
  • 2013-06-19
  • 2018-10-19
  • 2011-08-30
  • 2017-11-20
  • 1970-01-01
  • 2023-03-30
  • 2014-01-06
  • 2011-06-08
  • 2013-03-12
相关资源
最近更新 更多