以美国格式保存日期时间并以英国格式显示

问题描述:

我的服务器位于美国,我的客户位于印度。以美国格式保存日期时间并以英国格式显示

我试着写了一个函数,当我通过美国格式时可以返回英国日期,反之亦然。但它不起作用。

// client culture 
System.Globalization.CultureInfo UKcultureInfo = new System.Globalization.CultureInfo("en-gb"); 
// server culture 
System.Globalization.CultureInfo UScultureInfo = new System.Globalization.CultureInfo("en-us"); 
public DateTime ReturnUKDate(string date) 
{ 
      return DateTime.Parse(date, UKcultureInfo); 
} 

,但是当我通过ReturnUKDate(“2012年12月29日”)

我得到这个错误字符串未被识别为有效的DateTime。

+0

你将日期值保存到哪里?数据库,XML或其他(请指定)? – code4life 2012-03-05 16:20:26

首先,您应该始终使用将您的日期保存为UTC - 不是当地的时间格式。如果可以的话,也不要将日期保存为字符串(对于我猜测的XML来说是不可避免的),但是强类型化,例如SQL Server支持DateTime数据类型。从UTC开始,您可以转换为任何您想要的地方 - 用于显示目的

为了解析一个已知格式的特定日期字符串,你可以使用ParseExcactTryParseExcact,这样你就可以传递确切的格式字符串。

+0

请添加一些示例 – Moksha 2012-03-04 17:53:04

+0

您不应*总是*保存为UTC。例如,如果我想表示每周本地时间晚上7点发生的周期性事件,那么为了找出发生该事件的时刻,我需要存储时区,并且存储当地时间太有意义,而不是一些任意的UTC值进行转换。 – 2012-03-04 17:55:10

+0

@JonSkeet:为什么你不能从UTC时间导出本地事件时间? – BrokenGlass 2012-03-04 17:57:34

错误是因为您正在传递美式日期并指定英国文化。

这工作

var dt = DateTime.Parse("12/29/2012", new System.Globalization.CultureInfo("en-us")); 

等做到这一点

var dt = DateTime.Parse("29/12/2012", new System.Globalization.CultureInfo("en-gb")); 

我不知道在其他的答案中指出你正在试图做的是正确的。