2010-04-21 56 views
6

我使用下面的方法序列化的日期作为字符串C#DateTime,这种方法区域设置安全吗?

private const string DateFormatString = "dd.MM.yyyy HH:mm:ss"; 
string LastsuccessfuldownloadDateTime = DateTime.Now.AddDays(-91).ToString(DateFormatString); 

这是为了确保字符串总是被以这种格式序列化的最安全的方法?

在一台服务器上更新我有这个运行它完全让字段错误。

回答

9

我会使用显式不变序列化来避免任何意外的陷阱。您可能还想考虑是否需要UTC;例如:

string LastsuccessfuldownloadDateTime = DateTime.UtcNow.AddDays(-91).ToString(
    DateFormatString, CultureInfo.InvariantCulture); 
+0

同意。即使该特定格式*应该是安全的,明确使用InvariantCulture始终是一个好主意。 – Thorarin 2010-04-21 10:55:55

+2

+1。帮你一个忙,并使用UtcNow。您可以始终确定实际的时间是什么意思,并且您不会依赖与序列化日期时间相同的方式配置系统。 – ntziolis 2010-04-21 11:00:57

+0

@Marc,谢谢现在运行新测试... – 2010-04-21 11:06:01

0

我想你应该根据你的区域setting.Then不同的区域设置的计算机上的每一件事情都会正常工作改变你的程序的文化。

例如,如果您的区域设置是根据美国和你想运行你的程序在英国设置的机器上。

然后你的程序的CurrentCulture改变美国

Thread.CurrentThread.CurrentCulture =新的CultureInfo( “EN-US”);