C#日期时间以utc格式传递问题

时间:2012-05-03 10:57:46

标签: c# java .net windows

我的应用程序可以在任何具有任何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

现在服务器上的机器给它上午和下午的时间,但是在window7机器上给它时间没有AM / PM为什么会这样呢?

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

由于

7 个答案:

答案 0 :(得分:2)

输出格式取决于Culture,而不是OS版本。有关说明,请参阅Standard Date and Time Format Strings

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

您可以将Custom Date and Time Format Strings用于:

DateTime.ToString("format string", IFormatProvider)

示例:

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

在上面的代码中,确保“format string”是Java预期的那个

答案 3 :(得分: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);

答案 4 :(得分:0)

其中一个想法是你可以用毫秒发送时间并将毫秒转换为Java端的dateTime。

答案 5 :(得分:0)

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

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

感谢V4Vendetta和他们的评论。

将有其他人阅读相同的帖子有同样的问题。

答案 6 :(得分:0)

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