以美国格式保存日期时间并以英国格式显示
我的服务器位于美国,我的客户位于印度。以美国格式保存日期时间并以英国格式显示
我试着写了一个函数,当我通过美国格式时可以返回英国日期,反之亦然。但它不起作用。
// 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。
首先,您应该始终使用将您的日期保存为UTC - 不是当地的时间格式。如果可以的话,也不要将日期保存为字符串(对于我猜测的XML来说是不可避免的),但是强类型化,例如SQL Server支持DateTime
数据类型。从UTC开始,您可以转换为任何您想要的地方 - 用于显示目的。
为了解析一个已知格式的特定日期字符串,你可以使用ParseExcact
或TryParseExcact
,这样你就可以传递确切的格式字符串。
请添加一些示例 – Moksha 2012-03-04 17:53:04
您不应*总是*保存为UTC。例如,如果我想表示每周本地时间晚上7点发生的周期性事件,那么为了找出发生该事件的时刻,我需要存储时区,并且存储当地时间太有意义,而不是一些任意的UTC值进行转换。 – 2012-03-04 17:55:10
@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"));
我不知道在其他的答案中指出你正在试图做的是正确的。
你将日期值保存到哪里?数据库,XML或其他(请指定)? – code4life 2012-03-05 16:20:26