我的应用程序可以在任何具有任何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家伙不会有任何解析问题?
由于
答案 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库可以为您提供一致的结果。