您如何格式化并传递日期以获得更好的互操作兼容性?

时间:2011-03-10 16:57:43

标签: c# .net datetime soa

在我们12台服务器的生产环境中,我们遇到了代码问题

var date = DateTime.Parse("Thu, 10 Mar 2011 13:15:33 GMT");

并且这不是所有的时间,只是在几个服务器上(每月一次)它会抛出

System.FormatException: String was not recognized as a valid DateTime.
at System.DateTimeParse.Parse(String, DateTimeFormatInfo, DateTimeStyles)

日期“星期四,2011年3月10日13:15:33 GMT”是一个真实的例子,今天它来自另一个环境,并以下列方式创建

string.Format("{0:R}", ExpiresOn.ToUniversalTime())

第二天,我们将服务器重新插入服务器场,它们将继续正常运行。

  • 有什么方法可以避免这种情况吗?
  • 因为这些信息对于消费者来说是不透明的,我们认为切换到滴答声会更好吗?
  • 有什么好的做法吗?

谢谢

2 个答案:

答案 0 :(得分:1)

始终使用CultureInfo.InvariantCulture。这是一条规则。使用它来解析日期,数字(特别是浮点数/双打/小数),ToString(ing)日期,数字(特别是浮点数/双打/小数)等。如果你处理日期,总是想想它是否会更好以UTC或当地时区处理它们。如果您必须处理多个时区中服务器/人员之间的协调,请始终使用(存储)UTC日期。

答案 1 :(得分:0)

这是我根据之前的回答提出的内容

var original = DateTime.Now;
var stringified = original.ToString("r",CultureInfo.InvariantCulture);

并在消费者端/服务器上

var restored = DateTime.ParseExact(stringified, "r", CultureInfo.InvariantCulture);

我们做了一些测试,到目前为止看起来不错。 如果您觉得我错了或者可以做得更简单,请告诉我。谢谢。