Re: Странности со временем в клиент-серверном приложении
On Thu, May 10, 2007 at 11:18:16AM +0400, Олег Анисимов wrote:
> После полного краха системы и установки с нуля Etch обнаружилась
> одна странность. Генерируя отчет в клиент-серверном приложении,
> получил выпадение части данных за учетный период. Причем эти
> данные приходятся точнехонько на границу учетного периода, т.е.
> на 00:00 - 00:20 следующего месяца.
> Кроме того оказалось, что приложение показывает данные мониторинга
> на час ранее, чем реальное время на моей машине.
> Часы на сервере и на моей машине показывают одно время и ТЗ:
у жабы свои файлы тайм-зон и иногда возникают расхождения с её
представленями о правильном времени с остальными программ. Я с таким
столкнулся однажды на PH-UX и написал программулинку (в аттачменте).
Скомпилируй, запусти её (javac PrintDate.java && java PrintDate) и
проверь что всё в выводе выглядит нормально.
У меня в московском времени на java 1.5 вывод такой:
Calendar
DST Offset (min): 60
Zone Offset (min): 180
TimeZone: sun.util.calendar.ZoneInfo[id="W-SU",Offset800000,dstSavings600000,useDaylight=true,transitions0,lastRule=java.util.SimpleTimeZone[id=W-SU,Offset800000800000,dstSavings600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTimer00000,startTimeMode=1,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTimer00000,endTimeMode=1]]
Если всеравно будет непонятно, можно ещё сравнить с её выводом на корректно-
работающих компьютерах.
import java.util.*;
import java.text.*;
public class PrintDate {
public static void main(String args[]) {
System.out.println("Date: " + new java.util.Date());
Calendar cal = Calendar.getInstance();
System.out.println("Calendar\n DST Offset (min): " + cal.get(cal.DST_OFFSET)/(1000*60));
System.out.println(" Zone Offset (min): " + cal.get(cal.ZONE_OFFSET)/(1000*60));
TimeZone tz = cal.getTimeZone();
System.out.println("TimeZone: " + tz);
RuleBasedCollator en_US = (RuleBasedCollator)
Collator.getInstance(new Locale("en", "US", ""));
String[] avtz = tz.getAvailableIDs();
Arrays.sort(avtz, en_US);
System.out.println("Availble Timezones");
for (int i = 0; i < avtz.length; i++) {
System.out.println(" " + avtz[i]);
}
}
}
/*
* vim:ts=2:tw=2:sw=2
*/
Reply to: