Chrono Mock
ЯзыкРусский

Запускайте приложение Windows с любой датой — не трогая системные часы

Переведите часы одного приложения на следующий год, остановите их или ускорьте так, чтобы 30-дневный пробный период истёк, пока вы завариваете кофе. Остальная часть машины остаётся на настоящем времени — вход в домен, ваши сертификаты и все остальные программы работают как обычно.

А потом программа скажет, сработала ли подмена на самом деле.

Бесплатно и с открытым кодом, GPL-3.0 Без установки или с ней Для запуска права администратора не нужны Никогда не обращается к интернету

Как выглядит сессия

Приложение видит
2027-12-31
23:59:50
пояс сессии -05:00
Машина по-прежнему видит
2026-09-04
18:12:33
пояс хоста +02:00
Работает — подмена времени дошла до этого процесса
Отслеживаемые каналы времени до 44 · у каждого счётчик вызовов
Панель сессии Chrono Mock. Часы приложения показывают 2038-01-19 03:14:14, а настоящие часы рядом — 2026-09-22 15:50:30, у каждых своё прошедшее время. Ниже расположены скорости от x1 до x1440 с кнопкой Freeze, затем относительные скачки и скачок на введённую дату, а в нижней части зелёная галочка со словом Works рядом с красной кнопкой Stop session.
Работающая сессия. Приложение живёт в 2038 году, а машина — нет, и вердикт говорит, что подмена времени до приложения дошла.

Зачем это нужно

Чтобы протестировать всё, что зависит от даты, нужно сдвинуть время. Оба обычных способа плохи.

Срок действия лицензии, пробные периоды, продление подписок, срок действия сертификатов, время жизни токенов, отчёты на конец месяца и года, начисление процентов, напоминания.

Способ 1 — изменить системные часы

Это ломает вход в домен и Kerberos, аннулирует сертификаты TLS, из-за чего перестаёт работать браузер, сбивает с толку Windows Update и заставляет все остальные приложения на машине записывать неверные метки времени. На машине в домене групповая политика обычно блокирует изменение или откатывает его через несколько минут, так что тест даже невоспроизводим.

Способ 2 — ждать

То есть не тестировать. Случаи, зависящие от даты, пропускаются, а «лицензия никогда не истекает» уходит к клиенту.

Что оно умеет

Один процесс путешествует во времени. Больше ничто на машине.

Любой момент

Конкретные дата и время или относительные — +30 days, -1 year.

Идёт, стоит или ускорено

Обычная скорость, остановленные часы или целочисленный множитель. x1440 превращает сутки в минуту.

Собственный часовой пояс

Фиксированное смещение только для этого процесса, при этом системный пояс остаётся ровно там, где был.

Дочерние процессы идут следом

Установщики и лаунчеры порождают дочерние процессы. Без этого тест покрывает лишь половину того, что запускалось.

Скачок посреди сессии

Вперёд или назад — включая скачок назад, который делает ноутбук после повторной синхронизации с сервером времени.

И Electron, и Chromium

Другим механизмом, потому что их часы живут в изолированном рендерере, куда внедрение не достаёт.

То, чего не делает никто другой

Как понять, что подмена сработала?

С любым другим инструментом — никак. Приложение запускается, показывает какую-то дату, и вы предполагаете. Но оно может читать часы через канал, который инструмент так и не перехватил, — с сервера, из базы данных, через слой среды выполнения, — и тогда «тест пройден» не значит вообще ничего.

  • →Вердикт до начала настоящего теста: работает / работает частично / не работает
  • →Какие из 44 каналов времени были покрыты и сколько раз приложение обращалось к каждому
  • →Какие каналы покрыты не были — сказано прямо, никогда не умалчивается
  • →Предупреждения с последствиями: «это приложение читает время из сети — локальной подмены может быть недостаточно»

Как работает аудит источников времени →

Две минуты с программой

Окно для изучения, командная строка для CI. Один и тот же движок за обоими.

# Запустить приложение так, будто это последняя секунда 2027 года
chrono run "C:\apps\test.exe" --at 2027-12-31T23:59:59

# Посмотреть, как за чашку кофе истекает 30-дневный пробный период: x1440 — сутки за минуту
chrono run "C:\apps\test.exe" --mode x1440

# Использовать именованный сценарий вместо даты и записать доказательства в файл
chrono run "C:\apps\test.exe" --preset year-rollover --report session.txt

Калькулятор отвечает на вторую половину тестирования дат — какую дату брать:

$ chrono calc --preset year-2038 --zone +00:00
Chrono Mock - date calculator
  preset:   year-2038 - 2038 boundary
  explains: Does the app survive the 32-bit Unix time boundary (2038-01-19T03:14:07Z)?
  base:    2038-01-19T03:14:07
  result:  2038-01-19T03:14:07
  formats:
    ISO date      2038-01-19
    ISO datetime  2038-01-19T03:14:07+00:00
    US            01/19/2038
    PL            19.01.2038
    epoch (s)     2147483647
    epoch (ms)    2147483647000
    FILETIME      137919572470000000
    RFC 1123      Tue, 19 Jan 2038 03:14:07 GMT
  ...
  what this date lands on:
    at or past the 2038-01-19T03:14:07Z 32-bit time_t limit (Y2038)

В сравнении с тем, чем вы, вероятно, пользуетесь

Как RunAsDate, но с недостающими частями

RunAsDate перехватывает пять функций настенных часов и делает это хорошо. Вот в чём они различаются — а на полной странице сказано и о том, где RunAsDate по-прежнему лучше.

 RunAsDateChrono Mock
Запускает приложение с поддельной датойдада
Перехватываемые каналы времени544 (30 сдвигаются, 14 только считаются)
Ускорение часовнетда
Независимый часовой поясне описанода
Следует за дочерними процессамине описанода
Говорит, сработало линетда, по каналам
Открытый исходный кодфриварь, закрытыйGPL-3.0

Полное сравнение, в том числе где выигрывает RunAsDate →

Получите программу

Распакуйте где угодно и запускайте, либо установите подписанный .msi для всех учётных записей на компьютере. Для запуска права администратора не нужны, а zip-архивы ничего не пишут в реестр.