C # DateTime часовой пояс вычитать проблемы - PullRequest
6 голосов
/ 29 июля 2010

У меня есть эта строка кода:

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 по Гринвичу, поэтому DateTimeKind.Local действительно должен влиять на вещи.

Заранее спасибо!

Ответы [ 2 ]

5 голосов
/ 29 июля 2010

На странице 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 голос
/ 29 июля 2010

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

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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...