«DateTime.Now» - почему он возвращает GMT?

Я работаю на сервере Win2003, часовой пояс установлен на (GMT -06: 00) центральное время. Я программирую на VS.NET 2005, f / x 2.x. Когда я выполняю следующий код, я не получаю ожидаемых результатов - но только когда он находится на сервере PROD. Любая другая машина появляется на работу правильно.

_response.Timestamp = DateTime.Now;

Есть ли где-то скрытая настройка, которая может сделать это для веб-приложений .NET? Я просмотрел все конфиги, которые смог найти, но сразу ничего не увидел.


ПРИМЕЧАНИЕ: это происходит на всех наших серверах ...


ПРИМЕЧАНИЕ. Я попытался использовать дату, переданную на мою страницу:

[parameter 3] (Date): Thu Nov 05 22:23:16 MST 2009  // Web client time
LastPlayed (Date): Fri Nov 06 05:23:16 MST 2009  // Simple boxing of value

public class FlashObject
{
    #region Declarations
    public DateTime LastPlayed;
    public List<PlayList> Characters;
    public List<PlayList> Variations;
    #endregion
}

Вышеуказанный объект просто увлажняется так:

internal static void GetPlayer(FlashObject flashObject, DateTime clientPlayTime)

Обратите внимание, что они оба в MST (Горное Стандартное Время) !! :(

6.11.2009 05:21:03
Имеет ли какое-либо значение изменение информации о культуре (или нерешительности)?
Kane 6.11.2009 06:30:59
Нет. Я проверил все, что могу придумать. TZ на серверах установлены для времени горы, время установлено правильно, языковой стандарт установлен правильно, нет переопределений во всех наших браузерах и т. Д.
Keith Barrows 6.11.2009 15:42:19
Такое поведение было у меня на машине российского клиента много месяцев назад. Это оказалось проблемой самой Windows; копия Windows была русская, и поэтому любой язык или время, кроме русского, было просто невозможно! Никакие культуры пользовательского интерфейса или изменения в Windows не делали слепой разницы. К сожалению, это вам не поможет. :(
dooburt 6.11.2009 16:42:47
2 ОТВЕТА

что такое _request?

Внутренне, на HttpContextобъекте, рефлектор показывает этот код:

public DateTime get_Timestamp()
{
    return this._utcTimestamp.ToLocalTime();
}
0
29.11.2011 13:14:23
_request - это объект, который я определил в своем приложении. В основном это объект типа структуры с дополнительными объектами типа структуры и коллекциями внутри. Нет никаких методов, и это предназначено только, чтобы нести правильно сформированные данные вокруг приложения.
Keith Barrows 6.11.2009 17:14:15
РЕШЕНИЕ

После долгих исследований я изменил свои переменные DateTime на переменные DateTimeOffset. Я также изменил код Flash / Flex, чтобы передать имя TZ и смещение. С помощью этой информации я могу точно отслеживать время клиента.

private void SetUserInfo(DateTimeOffset ClientTime, int Offset)
{
    if (Offset != 0 && ClientTime.DateTime == ClientTime.UtcDateTime)
    {
        ClientTime = ClientTime.AddHours(Offset);
        _actionDateTime = new DateTimeOffset(ClientTime.DateTime, new TimeSpan(Offset, 0, 0));
    }
    else
        _actionDateTime = ClientTime;

    _actionUtcDateTime = new DateTimeOffset(_actionDateTime.DateTime.ToUniversalTime(), new TimeSpan(0, 0, 0));
}

С помощью приведенного выше фрагмента кода я могу сэкономить время клиента и время UTC.

1
12.11.2009 17:42:08
Любой, кто имеет дело со временем в приложениях .NET, должен, если они используют .NET 3.5 или новее. К сожалению, те, которые все еще нацелены на более старые версии CLR, содержат ошибки.
Chris Charabaruk 9.12.2009 04:05:57