[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: