Как изменить часовой пояс для приложения asp.net - PullRequest
14 голосов
/ 21 декабря 2011

Мне нужно установить часовой пояс по умолчанию для моего ASP.NET на Азия / Дакка или часовой пояс GMT + 6. Но я не могу найти способ изменить это глобально. Существует множество ссылок на Stackoverflow и остальную часть Интернета, чтобы сделать это, получая информацию о часовом поясе и вычисляя правильное время каждый раз, когда мне нужен объект DateTime.

Но поверь мне, я не хочу делать это таким образом. Так что не предлагайте мне никаких предложений. Я хочу установить часовой пояс в Азия / Дакка или GMT + 6, предпочтительно из web.config. (То же самое мы делаем в php с php.ini). Так что каждый раз, когда мне нужен объект DateTime, время оценивается с моим часовым поясом, независимо от того, какой часовой пояс для сервера.

Возможно ли это? Если возможно то как ?? Заранее спасибо за решение:)

Ответы [ 5 ]

11 голосов
/ 21 декабря 2011

Извините, в .NET нет способа изменить часовой пояс глобально.

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

Лучше всего вообще не полагаться на часовой пояс системы (никогда не используйте DateTime.Now).

Вы должны обрабатывать все даты как даты Utc, а затем преобразовывать их в определенную зону при отображении их пользователям.

Даже если вам удастся обработать часовые пояса в приложении ASP.NET, на SQL Server все еще есть часовые пояса, например функция GETTIME.Если ваше приложение полностью написано в формате UTC, функция SQL-сервера также будет работать.

3 голосов
/ 10 декабря 2014

Вы можете изменить часовой пояс ... и получить дату

 DateTime utcTime = DateTime.UtcNow;
    TimeZoneInfo myZone = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");
    DateTime custDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, myZone);
    Str.Append(custDateTime.ToString());
2 голосов
/ 14 августа 2018

Есть очень простой способ сделать это. Просто получите текущее время UTC и ваш часовой пояс в двух разных переменных. Затем конвертируйте UTC в ваш часовой пояс в третью переменную и используйте его где угодно. Вот как ты это делаешь.

DateTime date1 = DateTime.UtcNow;

TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Pakistan Standard Time");

DateTime date2 = TimeZoneInfo.ConvertTime(date1, tz);

Установите часовой пояс в tz, а затем используйте «date2» в любом месте.

2 голосов
/ 14 декабря 2014

У меня проблема с инструкцией:

TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");

Итак ... я создаю персональную TimeZoneInfo.

Вот мой код ...

public static DateTime DateNow()
        {
            DateTime utcTime = DateTime.UtcNow;
            TimeZoneInfo myZone = TimeZoneInfo.CreateCustomTimeZone("COLOMBIA", new TimeSpan(-5, 0, 0), "Colombia", "Colombia");
            DateTime custDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, myZone);
            return custDateTime;   
        }
0 голосов
/ 12 апреля 2019

Возникла похожая проблема (с часовыми поясами). В результате я изменил некоторые типы баз данных с DateTime на DateTimeOffset (MSSql).

DateTimeOffset Struct

Написал расширение

public static class Extensions
{
    public static DateTimeOffset ToCentralTime(this DateTimeOffset value)
    {
        return TimeZoneInfo.ConvertTime(value, TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"));
    }
}

Пример использования:

public class ClockPunch
{
    private DateTimeOffset dtoTimeIn;
    private DateTimeOffset? dtoTimeOut;
    public ClockPunch() { }
    public DateTimeOffset TimeIn
    {
        get { return dtoTimeIn.ToCentralTime(); }
        set { dtoTimeIn = value; }
    }
    public DateTimeOffset? TimeOut
    {
        get
        {
            DateTimeOffset? retVal = null;
            if (dtoTimeOut != null)
            {
                retVal = ((DateTimeOffset)dtoTimeOut).ToCentralTime();
            }
            return retVal;
        }
        set { dtoTimeOut = value; }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...