昆明驿站网站建设,织梦网站首页自动更新,中国今天刚刚发生的新闻,wordpress电脑安装教程Whats your time zone?JAVA日期和时间类彻底解决(1)Page 1 of 3你是否在苦苦挣扎在JAVA语言中的日期和时间中#xff1f;当你在计算机上显示日期和时间时#xff0c;, 是否要快一个小时#xff1f;或者可能要早一个小时#xff1f;, 或者两个小时, 或者更严重#xff1f;…Whats your time zone?JAVA日期和时间类彻底解决(1)Page 1 of 3你是否在苦苦挣扎在JAVA语言中的日期和时间中当你在计算机上显示日期和时间时, 是否要快一个小时或者可能要早一个小时, 或者两个小时, 或者更严重 当你试图用JAVA写日期和时间到一个文件中或者到你的数据库中(通过Java Database Connectivity (JDBC))— 错误的时间被保存了吗我曾经被这个问题困饶过很长时间。我不能解决为什么JAVA改变了我给的时间戳(timestamps)。我从数据库中检索时间戳数据并显示在我的图形用户接口(GUI)中时, 总是会显示一个不同的时间—和我期望的值要相差12或3个小时。我重新检查了数据库中的值它是正常的。 那么到底应该怎么办呢调查最终我决定对这种情况来调查一番。首先我写了一个简单的JAVA类:import java.util.*;public class DateTest {public static void main(String[] args) {System.out.println(Date new Date());System.out.println(Calendar Calendar.getInstance());}}在Windows 98 的 Java 2 Platform, Standard Edition (J2SE) 1.3.1_01,我得到Date Tue May 06 08:13:17 IDT 2003Calendar java.util.GregorianCalendar[time1052197997184,areFieldsSettrue,areAllFieldsSettrue,lenientfalse,zonejava.util.SimpleTimeZone[idAsia/Jerusalem,offset7200000,dstSavings3600000,useDaylighttrue,startYear0,startMode1,startMonth3,startDay9,startDayOfWeek0,startTime3600000,startTimeMode0,endMode1,endMonth8,endDay24,endDayOfWeek0,endTime3600000,endTimeMode0],firstDayOfWeek1,minimalDaysInFirstWeek1,ERA1,YEAR2003,MONTH4,WEEK_OF_YEAR19,WEEK_OF_MONTH2,DAY_OF_MONTH6,DAY_OF_YEAR126,DAY_OF_WEEK3,DAY_OF_WEEK_IN_MONTH1,AM_PM0,HOUR8,HOUR_OF_DAY8,MINUTE13,SECOND17,MILLISECOND184,ZONE_OFFSET7200000,DST_OFFSET3600000]在Sun Solaris 7 with J2SE 1.3.1_02我得到Date Tue May 06 08:13:17 IDT 2003Calendar java.util.GregorianCalendar[time1052197997184,areFieldsSettrue,areAllFieldsSettrue,lenientfalse,zonejava.util.SimpleTimeZone[idAsia/Jerusalem,offset7200000,dstSavings3600000,useDaylighttrue,startYear0,startMode1,startMonth3,startDay9,startDayOfWeek0,startTime3600000,startTimeMode0,endMode1,endMonth8,endDay24,endDayOfWeek0,endTime3600000,endTimeMode0],firstDayOfWeek1,minimalDaysInFirstWeek1,ERA1,YEAR2003,MONTH4,WEEK_OF_YEAR19,WEEK_OF_MONTH2,DAY_OF_MONTH6,DAY_OF_YEAR126,DAY_OF_WEEK3,DAY_OF_WEEK_IN_MONTH1,AM_PM0,HOUR8,HOUR_OF_DAY8,MINUTE13,SECOND17,MILLISECOND184,ZONE_OFFSET7200000,DST_OFFSET3600000]在 Linux Mandrake 7.2 with J2SE 1.3.0, 我得到Date Mon May 05 21:04:32 GMT00:00 2003Calendar java.util.GregorianCalendar[time1052168673155,areFieldsSettrue,areAllFieldsSettrue,lenienttrue,zonejava.util.SimpleTimeZone[idCustom,offset0,dstSavings3600000,useDaylightfalse,startYear0,startMode0,startMonth0,startDay0,startDayOfWeek0,startTime0,startTimeMode0,endMode0,endMonth0,endDay0,endDayOfWeek0,endTime0,endTimeMode0],firstDayOfWeek1,minimalDaysInFirstWeek1,ERA1,YEAR2003,MONTH4,WEEK_OF_YEAR19,WEEK_OF_MONTH2,DAY_OF_MONTH5,DAY_OF_YEAR125,DAY_OF_WEEK2,DAY_OF_WEEK_IN_MONTH1,AM_PM1,HOUR9,HOUR_OF_DAY21,MINUTE4,SECOND33,MILLISECOND155,ZONE_OFFSET0,DST_OFFSET0]你看到了Calendar类似乎有一个类成员是java.util.SimpleTimeZone的一个实例并且我也能通过一些办法确定使用javap实用程序它是J2SE的一部分: javap -private java.util.Calendar检查J2SE中src.jar文件中可利用的源代码实用JAVA的反射机制在任何一种情况下你都会发现在java.util.Calendar类中有一个私有实例成员名字为zone它是java.util.TimeZone实例。javap结果的部分输出显示为private java.util.TimeZone zone当我对java.util.Date类采用了同样的办法时你也能发现它有以下成员private transient java.util.Calendar cal;这个就间接的表明Date类也是一个TimeZone成员。然而Java文档告诉我们TimeZone是一个抽象类但是SimpleTimeZone是一个聚合子类。因此尽管定义为成员Calendar中的zone成员实际上是SimpleTimeZone实例(在J2SE 1.3中)。 这个可以通过使用上面的方法来调查TimeZone很容易得到证实。真正地Calendar中的zone成员是一个SimpleTimeZone实例。检查DateTest 类的输出它涉及到TimeZone的夏令时(DST)属性并为它们命名为以下属性:dstSavingsuseDaylightstartYearstartModestartMonthstartDaystartDayOfWeekstartTimestartTimeModeendModeendMonthendDayendDayOfWeekendTimeendTimeMode因此你能看到Date和Calendar类在Daylight Saving Time上有一个概念。 档我开始调查这个的时候是summer (last year), 为了调整我们服务器所有的夏令时(DST)我将系统时间向前挪移了一个小时。因此我认为JAVA将不会对DST进行调整。posted on 2006-02-18 09:31 水煮三国 阅读(862) 评论(0) 编辑 收藏