0

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

现在我正在尝试像这样以 utc 格式获取时间

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

它的输出是这样的——

在window7机器上

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 时间,但在 windows7 机器上它给出没有 AM/PM 的时间为什么会这样?

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

谢谢

4

7 回答 7

2

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

于 2012-05-03T10:59:56.583 回答
2

这与操作系统无关 - 它与代码运行的语言环境有关。可能是机器设置了不同的语言环境,这就是差异的原因。

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

于 2012-05-03T11:00:58.817 回答
0

您可以将自定义日期和时间格式字符串用于:

DateTime.ToString("format string", IFormatProvider)

例子:

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

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

于 2012-05-03T11:00:20.983 回答
0

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

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);
于 2012-05-03T11:01:33.650 回答
0

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

于 2012-05-03T11:07:42.320 回答
0

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

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

感谢 V4Vendetta 和 ie 的评论。

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

于 2012-05-04T04:38:55.100 回答
0

Noda Time库将为您提供一致的结果。

于 2014-01-01T02:14:56.483 回答