Показать сообщение отдельно
  #43 (permalink)  
Старый 18.07.2018, 04:35
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от arkadii_parovozov
js не имеет прямого доступа к системному времени?
Все работает по RTC, это и есть системное время, часы реального времени. Система получает метку от реальных часов и далее отдает их для всех в системе посредством высокоточного таймера (не помню точно как он дразнится) как системное время, включая и часы которые идут. Не думаю чтобы JS работал напрямую с железом компьютера (RTC, это и есть "железяка" на материнской плате, ради которой на ней устанавливается и батарейка), об этом говорит и поведение скрипта при смене часового пояса.

Я потому и писал о неожиданности, которой в общем быть не должно. RTC изменяется как раз в настройках дата/время или в BIOS. При смене часового пояса, а значит и изменении времени, программы реагируют на изменения, например редактор будет предлагать сохранить изменения в открытых файлах. Почему я и не стал проверять то, что мог и упустить, меняя часовой пояс, слишком много файлов открыто было, чтобы все перещелкать.

Теперь можно и проверить. Все нормально, как и ожидалось, и должно быть, js сценарий отображает ровно то, что на системных часах. Но я ошибался, предлагая эксперимент, предполагая, что можно будет отловить использование или нет перехода на летнее время. Если сменить часовой пояс (сейчас как раз лето) на пояс с переходом на летнее время, то системные часы будут переведены на N часов вперед (согласно выбранному часовому поясу). Если снять флажок разрешающий переход на летнее время, то переводить часы назад придется вручную, ОС не изменит время. Естественно, что все эти изменения будут отражаться и на RTC, что можно проверить перезапуском системы. А значит и у клиента бага связанного с летним временем быть не должно. По идее такое можно было наблюдать один раз, когда js сценарий запущен и произошел системный переход на летнее время, что при последующем запуске браузера было бы устранено.

По идее так, вот как только проверить такой момент (эмулировать) я не знаю. О чем я знаю, о единственном баге со временем, это то, что системные часы и часы BIOS могут расходиться в показаниях на N секунд. Это связано как раз с точным таймером отдающем системное время приложениям. Об этом можно почитать на официальном сайте мелкософта.
Ответить с цитированием