UTC 格式的 C# 日期时间传递问题

本文关键字:问题 时间 日期 格式 UTC | 更新日期: 2023-09-27 18:33:07

我的应用程序可以在具有任何Windows操作系统的任何类型的机器上运行。现在它将与 java 内置的服务器主机 rest api 通信。

现在我正在尝试以这样的 UTC 格式获取时间

Console.WriteLine("utc : " + DateTime.UtcNow);
Console.WriteLine("utc : " + DateTime.Now.ToUniversalTime());
Console.WriteLine("normal : " + DateTime.Now);

它的输出是这样的——

在窗口7机器上

utc : 03-05-2012 10:48:22
utc : 03-05-2012 10:48:22
normal : 03-05-2012 16:18:22

在 Windows Server 2008R2 机器上

utc : 5/3/2012 10:47:35 AM
utc : 5/3/2012 10:47:35 AM
normal : 5/3/2012 4:17:35 PM

现在,服务器机器上它使用 AM/PM 提供 UTC 时间,但在 window7 机器上,它没有 AM/PM 的给出时间,为什么会这样?

有没有方法可以在所有类型的 Windows 操作系统上以相同的格式返回相同的 UTC 时间,这样 java 家伙就不会有任何解析问题?

谢谢

UTC 格式的 C# 日期时间传递问题

输出格式取决于区域性,而不是操作系统版本。有关说明,请参阅标准日期和时间格式字符串。

这不一定与操作系统有关 - 它与代码运行的区域设置有关。 计算机可能设置了不同的区域设置,这解释了差异。

如果需要精确控制格式,则应通过 DateTime.String(string format) 方法手动指定格式来使用自定义格式字符串。

可以将自定义日期和时间格式字符串与以下内容一起使用:

DateTime.ToString("format string", IFormatProvider)

例:

  DateTime.ToString("dd MM yyyy", CultureInfo.InvariantCulture);

在上面的代码中,确保"格式字符串"是Java期望的

指定日期应使用的特定格式(应用程序之间商定)

C# 序列化日期:

Console.WriteLine("utc : " + String.Format("{0:d/M/yyyy HH:mm:ss}", DateTime.UtcNow));
Console.WriteLine("utc : " + String.Format("{0:d/M/yyyy HH:mm:ss}", DateTime.Now.ToUniversalTime()));
Console.WriteLine("normal : " + String.Format("{0:d/M/yyyy HH:mm:ss}", DateTime.Now));

Java 解析日期:

DateFormat formatter = new SimpleDateFormat("d/M/yyyy HH:mm:ss");
Date date = (Date) formatter.parse(dateToParse);
其中一个

想法是,你可以以毫秒为单位发送时间,并在Java端将毫秒转换为dateTime。

如果我们使用ToString("s")它本质上是yyyy-MM-ddTHH:mm:ss格式,它将在不同的操作系统上为您提供相同的格式,具有不同的文化。

我们通常将其用于此类通信"可排序日期/时间模式"。

感谢V4Vendetta和IE的评论。

它会让其他人阅读同一帖子时遇到同样的问题。

Noda Time 库会给你一致的结果。