2013-03-05 3 views
2

Функция ниже должна преобразовать следующий Юниксовое время в объект # DateTime C:Unix DateTime Расхождение

время выше должна представлять 5 марта 2012 12:54 вечера.

Однако, каждый раз, когда я запускаю его через функцию ниже, она меняется на 5:54 вечера:

3/5/2013 5:54:46 PM

static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); 
    static readonly double MaxUnixSeconds = (DateTime.MaxValue - UnixEpoch).TotalSeconds; 

    public static DateTime UnixTimeStampToDateTime(double unixTimeStamp) 
    { 
     return unixTimeStamp > MaxUnixSeconds 
      ? UnixEpoch.AddMilliseconds(unixTimeStamp) 
      : UnixEpoch.AddSeconds(unixTimeStamp); 
    } 

Как я могу получить время unix, чтобы оно было правильно представлено как 12:54 вместо 5:54?

+3

Вы, вероятно, нужно искать функции для преобразования GMT (или это UTC эти дни?) В местное время , Возможно, это поможет: Язык может быть другим, но требуемые функции часто имеют одинаковые или очень похожие имена на разных языках. –

+0

Хороший вопрос; Я не знаю, в какой часовой зоне они меня посылают. Я просто знаю, что это должно быть 12:54, и когда я подключу его к своей функции, он выйдет 5:45 ... – user1477388

+0

@ user1477388: Вы должны ВСЕГДА спросить себя, в какой временной зоне находится дата или время, ПЕРЕД выполнением чего-либо с Это. –

ответ

0

Исправление, для меня было добавить ToLocalTime() к коду, например:

static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); 
static readonly double MaxUnixSeconds = (DateTime.MaxValue - UnixEpoch).TotalSeconds; 

public static DateTime UnixTimeStampToDateTime(double unixTimeStamp) 
{ 
    return unixTimeStamp > MaxUnixSeconds 
     ? UnixEpoch.AddMilliseconds(unixTimeStamp).ToLocalTime() 
     : UnixEpoch.AddSeconds(unixTimeStamp).ToLocalTime(); 
} 
+1

Осторожно там - 'ToLocalTime()' может получить значение, которое имеет смысл для вас прямо сейчас, но если вы не можете гарантировать, что отметка времени возникла в том же часовом поясе или находится в формате UTC, это приведет к возникновению проблем. Однако - временные метки unix * предполагается * в UTC. Просто убедитесь, что местное время действительно то, что вам нужно. –

+0

Спасибо, Мэтт; Я это рассмотрю. – user1477388

2

Это звучит как проблема с часовым поясом. Убедитесь, что часовой пояс, используемый для генерации времени Unix, совпадает с часовым поясом в системе Windows или соответствующим образом конвертируется.