как конвертировать время сервера в местное время - PullRequest
8 голосов
/ 26 ноября 2008

У меня проблема со временем
Мой сервер находится в США, а я в Дании (Европа), и я хотел бы, чтобы мой сайт показывал время по местному времени. Как я могу это сделать?

Я пытаюсь это

Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(1,0,0)).DateTime;

и это работает, но это будет работать только когда я в GMT + 1 / UTC + 1, а не когда я в GMT + 2 / UTC + 2. Есть ли другой способ сделать это - более простой способ сделать это?

Ответы [ 4 ]

11 голосов
/ 26 ноября 2008

Единственный способ сделать это следующим образом:

string zoneId = "Central European Standard Time";
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(zoneId);
DateTime result = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow,tzi);
Console.WriteLine("Time is " + result + " in Denmark");

Использование класса TimeZoneInfo - единственный надежный способ в .Net конвертировать в / из разных часовых поясов и получать правильные преобразования летнего времени.

TimeZoneInfo.ConvertTimeToUtc(dtLocal,tzi) - обратное преобразование из местного времени в обычное время.


Для строк TimeZone Id вы можете запустить бит кода здесь ...

foreach( var tz in TimeZoneInfo.GetSystemTimeZones() )
{
    Console.WriteLine(tz.DisplayName + " is Id=','" + tz.Id + "'");
}
0 голосов
/ 25 февраля 2016
Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(1,0,0)).DateTime;

Вы можете изменить интервал времени как -

Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(3,0,0)).DateTime;

в соответствии с часовым поясом.

0 голосов
/ 25 апреля 2013

Я сделал преобразование для отображения в виде сетки с помощью поля шаблона.

<asp:TemplateField HeaderText="Last Activity">
                <ItemTemplate>
                    <asp:Label ID="LastActivityLBL" runat="server" Text='<%# Convert.ToDateTime(Eval("LastActivityDate")).ToLocalTime() %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Last Login">
                <ItemTemplate>
                    <asp:Label ID="LastLoginLBL" runat="server" Text='<%# Convert.ToDateTime(Eval("LastLoginDate")).ToLocalTime() %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
0 голосов
/ 26 ноября 2008

Вы можете отключить сервер и сделать это.

DateTime myTimeGMT = ServerTime.ToUniversalTime();

Это сделать это:

DateTime myTimeLocal = myTimeGMT.ToLocalTime();

Единственное ограничение - компьютер, на котором вы работаете, должен быть настроен на часовой пояс, в который вы конвертируете.

По моему опыту, в .NET возникают проблемы с преобразованием часовых поясов, когда ни время "От", ни время "До" не являются местным часовым поясом.

Надеюсь, это поможет.

...