2010-07-29 3 views
6

У меня есть эта строка кода:C# DateTime вопросы вычитать часового пояса

double seconds = new DateTime(2006,7,6,12,1,0,DateTimeKind.Local).Subtract(new DateTime(1970,1,1,0,0,0,DateTimeKind.Local).TotalSeconds; 

Это не правильный номер, я хотел, чтобы я попробовал следующее:

double seconds = new DateTime(2006,7,6,12,1,0,DateTimeKind.Local).Subtract(new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc).TotalSeconds; 

(Разница заключается в том, что в одном случае я использую местное время для эпохи, а в другом - UTC). Интересно, однако, они оба дают мне такую ​​же ценность, и я не знаю, почему это так. Я живу на -600 GMT, поэтому DateTimeKind.Local действительно должен влиять на вещи.

Заранее благодарен!

ответ

5

На странице DateTimeKind на MSDN (http://msdn.microsoft.com/en-us/library/shx7s921.aspx), говорится:

Члены перечисления DateTimeKind используются в операциях преобразования между местным временем и координированного времени (UTC), но не в сравнительных или арифметических операций , Дополнительные сведения о преобразованиях времени см. В разделе Преобразование времени между часовыми поясами.

Советы там говорит использовать TimeZoneInfo.ConvertTimeToUtc

Итак, основываясь на том, что код, вероятно, должен быть изменен:

double seconds = new DateTime(2006,7,6,12,1,0,DateTimeKind.Local).Subtract(TimeZoneInfo.ConvertTimeToUtc(new DateTime(1970,1,1,0,0,0,DateTimeKind.Local)).TotalSeconds 
+1

для записи, его на самом деле это: double seconds = TimeZoneInfo.ConvertTimeToUtc (новый DateTime (2006,7,6,12,1,0, DateTimeKind.Local)). Subtract (новый DateTime (1970,1,1,0,0, 0, DateTimeKind.Local) .TotalSeconds – codersarepeople

1

Попробуйте это:

namespace ConsoleApplication1 
{ 
    using System; 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      var laterDate = new DateTime(2006, 7, 6, 12, 1, 0); 
      var earlyDate = new DateTime(1970, 1, 1, 0, 0, 0); 
      var diff = laterDate.ToUniversalTime().Subtract(earlyDate.ToUniversalTime()); 
      var seconds = diff.TotalSeconds; 
     } 
    } 
} 
Смежные вопросы