C #: метка времени Unix и дата / время - PullRequest
2 голосов
/ 19 октября 2011

мы разрабатываем веб-приложение на C #, которое имеет дело с метками времени Unix и объектами C # DateTime. Отметка времени должна быть преобразована в объект DateTime.

Следующий пример показывает мою проблему: DateTime должно быть '18 .10.2011 14: 02: 32 '

System.DateTime time = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
time = time.AddSeconds(1318939352);
System.Console.Out.WriteLine("Time: " + time); // -> 18.10.2011 12:02:32

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

System.DateTime time = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
time = time.AddSeconds(1318939352).ToLocalTime();
System.Console.Out.WriteLine("Time: " + time); // -> 18.10.2011 14:02:32

Но приложение будет работать на серверах, которые размещены в другом часовом поясе (стандартное время по Гринвичу), поэтому мне приходится иметь дело с другим часовым поясом, и второй пример дает сбой на этих серверах. Независимо от того, где я размещаю приложение, дата в этом случае всегда должна быть напечатана как 18.10.2011 14: 02: 32.

Кто-нибудь знает, как я могу это сделать? Заранее спасибо!

С наилучшими пожеланиями, Торстен

1 Ответ

0 голосов
/ 19 октября 2011

Вы можете посмотреть TimeZoneInfo

public struct DateTimeWithZone
{
    private readonly DateTime utcDateTime;
    private readonly TimeZoneInfo timeZone;

    public DateTimeWithZone(DateTime dateTime, TimeZoneInfo timeZone)
    {
        utcDateTime = TimeZoneInfo.ConvertTimeToUtc(dateTime, timeZone); 
        this.timeZone = timeZone;
    }

    public DateTime UniversalTime 
    { 
       get {  return utcDateTime; } 
    }

    public TimeZoneInfo TimeZone 
    { 
       get { return timeZone; } 
    }

    public DateTime LocalTime
    { 
        get { return TimeZoneInfo.ConvertTime(utcDateTime, timeZone); }
    }        
}
...