На работе спросили: что напечатает следующая программа, если ее запустить 1 марта 2009 г. ровно в полдень в Нью Йорке? (Вместо Нью Йорка можно запустить программу в Москве — изменится ответ, но не его суть).
Ничего сложного или нового в этом нет, но, по-моему, это из тех мелочей, которые очень сильно портят жизнь.

Язык значения не имеет, нам представили вариант на Java:
  1. import java.text.SimpleDateFormat;
  2. import java.util.Date;
  3.  
  4. public class Question {
  5.      private static final long SECONDS_PER_DAY = 24 * 60 * 60;
  6.      private static final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
  7.  
  8.      public static void main(String[] args) {
  9.             for (int i = 0; i < 30; i++) {
  10.                  System.out.println("The time is: " + sdf.format(new Date()));
  11.  
  12.                  try {
  13.                         // wait until tomorrow
  14.                         Thread.sleep(1000 * SECONDS_PER_DAY);
  15.                  }
  16.                  catch (InterruptedException e) {
  17.                  }
  18.             }
  19.      }
  20. }
  21.  
* This source code was highlighted with Source Code Highlighter.

Допустим, что программа выполнится от начала и до конца, а также что sleep не прерывается.

Напрашивается ответ, что программа напечатает 30 строк The time is: 12:00:00.

На самом же деле, начиная с некоторой даты, которая как раз и зависит от места выполнения, вывод программы станет The time is: 13:00:00. Произойдет это из-за перехода на летнее время (8 марта в США, 29 марта в России).

Получается, что как минимум дважды в год в сутках не 24 * 60 * 60 секунд.

Надеюсь, кому-нибудь это сохранит некоторое количество времени. :-)