Uzix | микроблог

Проверяем готовность сервера к переходу на зимнее время

Всего месяц остался до перевода стрелок - пора подготавливаться к этому.

Для проверки готов ли сервер к зимнему времени можно использовать следующую команду:

linux% for i in `seq 1414269000 3600 1414280000`; do date --date="@$i"; done
freebsd% for i in `jot 4 1414269000 1414280000 3600`; do date -jf"%s" "$i"; done

Если всё ок - вывод будет таким:

Sun Oct 26 00:30:00 MSK 2014
Sun Oct 26 01:30:00 MSK 2014
Sun Oct 26 01:30:00 MSK 2014
Sun Oct 26 02:30:00 MSK 2014

Видим, что час ночи в Москве будет целых два раза - это и есть перевод часов. Если в системе временные зоны не обновлены, то последней строкой будет

Sun Oct 26 03:30:00 MSK 2014

Обновляем штатными средствами дистрибутива:

debian% aptitude update && aptitude install tzdata
centos% yum update && yum upgrade tzdata
freebsd% cd /usr/ports/misc/zoneinfo && make install clean && tzsetup

Либо универсальным методом:

% t=`mktemp -d` && cd $t && (curl http://www.iana.org/time-zones/repository/releases/tzdata2014h.tar.gz | tar xzvf -) && zic europe && cd && rm -rf $t

Так же нужно учесть, что некоторые платформы используют свою собственную базу данных по часовым поясам. Проверяем PHP:

php -r 'for ($i=1414269000; $i<=1414280000; $i+=3600) { echo date("r", $i)."\n"; }'

Исходник, проверяющий время в java:

cat >timetest.java <<EOF
import java.util.Date;
import java.sql.Timestamp;
public class timetest {
  public static void main(String[] args) {
	for (long i=1414269000;i<=1414280000;i+=3600) {
		Timestamp stamp = new Timestamp(i*1000);
		Date date = new Date(stamp.getTime());
		System.out.println(date);
	}
  }
}
EOF
javac -source 1.6 -target 1.6 timetest.java
java timetest

Зоны java обновляем либо штатными средствами дистрибутива, либо, если используется java с сайта Оракла - качаем Java Time Zone Updater Tool и запускаем

java -jar tzupdater-1.4.7-2014g/tzupdater.jar -u
java -jar tzupdater-1.4.7-2014g/tzupdater.jar -t

Комментарии