Где именно .Net берет это значение? Это значение от GetSystemTimeAsFileTime? Как это значение рассчитывается тогда? Это как-то основано на значении QPC?Как рассчитывается значение DateTime.UtcNow?
ответ
UtcNow
определен, как показано ниже (Атрибуты зачищенные для краткости)
public static DateTime UtcNow
{
get
{
return new DateTime((ulong) ((GetSystemTimeAsFileTime() + 0x701ce1722770000L) | 0x4000000000000000L));
}
}
GetSystemTimeAsFileTime
определяется как внутренний вызов.
[MethodImpl(MethodImplOptions.InternalCall), SecurityCritical]
internal static extern long GetSystemTimeAsFileTime();
отражатель не может помочь больше, позволяет копаться в sscli.
GetSystemTimeAsFileTime
карты для SystemNative::__GetSystemTimeAsFileTime
(ecall.cpp)
FCFuncStart(gDateTimeFuncs)
FCFuncElement("GetSystemTimeAsFileTime", SystemNative::__GetSystemTimeAsFileTime)
FCFuncEnd()
И, наконец, SystemNative::__GetSystemTimeAsFileTime
реализуется, как показано ниже (comsystem.cpp)
FCIMPL0(INT64, SystemNative::__GetSystemTimeAsFileTime)
{
WRAPPER_CONTRACT;
STATIC_CONTRACT_SO_TOLERANT;
INT64 timestamp;
::GetSystemTimeAsFileTime((FILETIME*)×tamp);
#if BIGENDIAN
timestamp = (INT64)(((UINT64)timestamp >> 32) | ((UINT64)timestamp << 32));
#endif
return timestamp;
}
FCIMPLEND;
Так, UtcNow
просто оберткой GetSystemTimeAsFileTime функции, и обрабатывает корпус для BigEndian.
Мы не можем идти дальше, пока Microsoft выпускает свой открытый источник операционной системы :)
DateTime.UtcNow
рассчитывается путем вычитания смещения временной зоны хост-систем с текущей даты/времени.
И да, глядя в ILSpy внутренне он звонит GetSystemTimeAsFileTime:
[SecurityCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern long GetSystemTimeAsFileTime();
Чтобы сделать это вручную тянуть текущий часовой пояс с помощью TimeZoneInfo.Local, это дает вам BaseUtcOffset, которые затем можно вычесть из текущей даты/время, например:
TimeZoneInfo tz_info = TimeZoneInfo.Local;
TimeSpan offset = tz_info.BaseUtcOffset;
DateTime now = DateTime.Now;
DateTime utc_now = now.Subtract(offset);
Обратите внимание, что эти значения сохраняются в качестве параметров операционной системы в реестре и за его пределами. Помните, когда вы устанавливаете Windows, вы выбираете, какой часовой пояс вы хотите быть в случае, если вы смелы вы можете найти некоторую информацию здесь:.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
Там отличная статья о часовых поясах-и т.д. на MSDN Блоги -. http://blogs.msdn.com/b/bclteam/archive/2007/06/07/exploring-windows-time-zones-with-system-timezoneinfo-josh-free.aspx
Whow. Люди проверяют IL вместо исходного кода.
Источник класса DateTime находится в http://referencesource.microsoft.com/#mscorlib/system/datetime.cs,df6b1eba7461813b
UtcNow начинается в строке 959.
Нет необходимости использовать дизассемблер, рефлектор или что-нибудь еще - вы можете увидеть код, как это было написано.
Но ничего не реализовано в управляемом коде. Таким образом, проверка источника также не дает большого понимания. –
- 1. DateTime.UtcNow дает различное значение на разных серверах
- 2. Как добавить TimeZone в DateTime.UtcNow?
- 3. Как изменить значение DateTime.UtcNow для процесса или потока?
- 4. Как рассчитывается подключение Pusher?
- 5. DateTime.UtcNow и GETUTCDATE() несоответствие
- 6. Как рассчитывается использование iostat?
- 7. Продолжительность вычислений БЕЗ DateTime.UtcNow
- 8. Как рассчитывается покрытие xgboost?
- 9. Как рассчитывается метод Croston
- 10. GPS, как рассчитывается курс?
- 11. Как рассчитывается em?
- 12. Как рассчитывается эта сумма
- 13. Как рассчитывается осциллятор Боллинджера?
- 14. Как рассчитывается гомография?
- 15. Как рассчитывается высота MKMapCamera?
- 16. как он рассчитывается?
- 17. Как рассчитывается git-хэш?
- 18. Значение TraCI не рассчитывается с выходом
- 19. Различное значение рассчитывается в одном столбце
- 20. DateTime.UtcNow на 4 часа вперед
- 21. Python datetime.utcnow() возвращение неправильно DateTime
- 22. Является ли DateTimeOffset.UtcNow.DateTime эквивалентным DateTime.UtcNow?
- 23. js Значение Math.PI не рассчитывается как должно быть
- 24. Как рассчитывается значение полярности Vader 'complex' в Python NLTK?
- 25. Как рассчитывается оценка функции (/ значение) в пакете XGBoost?
- 26. Datetime.UtcNow в запросе на платформу Entity Framework оценивается иначе, чем DateTime.UtcNow в C# IL
- 27. Java долго рассчитывается неправильно
- 28. Как рассчитывается путь градиента CSS?
- 29. Как запас из UIElement рассчитывается
- 30. Как рассчитывается размер страницы scrollView?
Мой вопрос для вас, почему это имеет значение, откуда исходит значение. –
Это вызов ['GetSystemTimeAsFileTime'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms724397%28v=vs.85%29.aspx). [Источник] (http://referencesource.microsoft.com/# mscorlib/system/datetime.cs, b0d5e4c9a8d4ddac) – dcastro
'GetSystemTimeAsFileTime' является' internal'. Итак .. –