2011-01-13 48 views
3

我一直有一些麻烦,理解为什么恢复的日期时间字符串的值与原来的不同。我正在将该字符串写入通用日期时间(格式为“u”,因此它末尾有一个'z'),但是当它恢复时,它相差一个小时。我使用“u”来防止这种事情发生。有人可以告诉我为什么它有所不同吗?DateTime.Parse关闭一个小时。为什么?

我需要一个很好的字符串表示形式,因为我将在5个不同的时区使用代码。

程序:

using System; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfoByIetfLanguageTag("es-CR"); 

      DateTime min = DateTime.MinValue; 

      Console.Write("Min value date: "); 
      Console.WriteLine(min); 

      Console.Write("String:   "); 
      string str = min.ToString("u"); 
      Console.WriteLine(str); 

      DateTime dt = DateTime.Parse(str); 

      Console.Write("Restored Date: "); 
      Console.WriteLine(dt); 

      Console.ReadLine(); 

     } 
    } 
} 

输出是:

最小值日期:01/01/0001 12:00:00 AM

字符串:0001-01-01 00:00:00Z

恢复日期:01/01/0001 01:00:00 am

编辑:选择尝试哥斯达黎加文化。

+1

当您将字符串解析回日期时间时,您在什么时区? – 2011-01-13 16:15:58

回答

4

当你解析通用的DateTime字符串时,它使用你的本地时区?您可以使用方法ToUniversalTime()和ToLocalTime()来回转换。另外,如果您将时区偏移量放在“Z”之后,这将帮助您转换到正确的时区。

Brian

+0

代码字符串str = min.ToUniversalTime()。ToString(“u”,System.Globalization.CultureInfo.InvariantCulture);似乎表现出预期的效果。仍在研究其他文化,以测试这是否是修复。 – 2011-01-13 16:37:17

1

有一个非常interesting thread about this on bytes.com

在您的日期结束时,您看起来像'Z'正在UTC和CET之间搅乱。

在很扩散面积CET现在是 (非夏令时)正是一个我们 后来则在UTC/GMT/ZULU /军事。

我对这个问题不太自信,所以我让你读一下这个话题。

相关问题