java 只有日期的类_JAVA日期和时间类彻底解决(1)[转]

What's your time zone?

JAVA日期和时间类彻底解决(1)Page 1 of 3

你是否在苦苦挣扎在JAVA语言中的日期和时间中?当你在计算机上显示日期和时间时,, 是否要快一个小时?或者可能要早一个小时?, 或者两个小时, 或者更严重? 当你试图用JAVA写日期和时间到一个文件中,或者到你的数据库中(通过Java Database Connectivity (JDBC))— 错误的时间被保存了吗?

我曾经被这个问题困饶过很长时间。我不能解决为什么JAVA改变了我给的时间戳(timestamps)。我从数据库中检索时间戳数据并显示在我的图形用户接口(GUI)中时, 总是会显示一个不同的时间—和我期望的值要相差1,2或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 2003

Calendar = java.util.GregorianCalendar[time=1052197997184,areFieldsSet=true,areAllFieldsSet

=true,lenient=false,zone=java.util.SimpleTimeZone[id=Asia/Jerusalem,offset=7200000,

dstSavings=3600000,useDaylight=true,startYear=0,startMode=1,startMonth=3,startDay=9,

startDayOfWeek=0,startTime=3600000,startTimeMode=0,endMode=1,endMonth=8,endDay=24,

endDayOfWeek=0,endTime=3600000,endTimeMode=0],firstDayOfWeek=1,minimalDaysInFirstWeek=1,

ERA=1,YEAR=2003,MONTH=4,WEEK_OF_YEAR=19,WEEK_OF_MONTH=2,DAY_OF_MONTH=6,DAY_OF_YEAR=126,

DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=8,HOUR_OF_DAY=8,MINUTE=13,SECOND=17,

MILLISECOND=184,ZONE_OFFSET=7200000,DST_OFFSET=3600000]

在Sun Solaris 7 with J2SE 1.3.1_02,我得到:

Date = Tue May 06 08:13:17 IDT 2003

Calendar = java.util.GregorianCalendar[time=1052197997184,areFieldsSet=true,areAllFieldsSet

=true,lenient=false,zone=java.util.SimpleTimeZone[id=Asia/Jerusalem,offset=7200000,

dstSavings=3600000,useDaylight=true,startYear=0,startMode=1,startMonth=3,startDay=9,

startDayOfWeek=0,startTime=3600000,startTimeMode=0,endMode=1,endMonth=8,endDay=24,

endDayOfWeek=0,endTime=3600000,endTimeMode=0],firstDayOfWeek=1,minimalDaysInFirstWeek=1,

ERA=1,YEAR=2003,MONTH=4,WEEK_OF_YEAR=19,WEEK_OF_MONTH=2,DAY_OF_MONTH=6,DAY_OF_YEAR=126,

DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=8,HOUR_OF_DAY=8,MINUTE=13,SECOND=17,

MILLISECOND=184,ZONE_OFFSET=7200000,DST_OFFSET=3600000]

在 Linux Mandrake 7.2 with J2SE 1.3.0, 我得到:

Date = Mon May 05 21:04:32 GMT+00:00 2003

Calendar = java.util.GregorianCalendar[time=1052168673155,areFieldsSet=true,areAllFieldsSet

=true,lenient=true,zone=java.util.SimpleTimeZone[id=Custom,offset=0,dstSavings=3600000,

useDaylight=false,startYear=0,startMode=0,startMonth=0,startDay=0,startDayOfWeek=0,

startTime=0,startTimeMode=0,endMode=0,endMonth=0,endDay=0,endDayOfWeek=0,endTime=0,

endTimeMode=0],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2003,MONTH=4,

WEEK_OF_YEAR=19,WEEK_OF_MONTH=2,DAY_OF_MONTH=5,DAY_OF_YEAR=125,DAY_OF_WEEK=2,

DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=9,HOUR_OF_DAY=21,MINUTE=4,SECOND=33,MILLISECOND=155,

ZONE_OFFSET=0,DST_OFFSET=0]

你看到了,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)属性,并为它们命名为以下属性:

dstSavings

useDaylight

startYear

startMode

startMonth

startDay

startDayOfWeek

startTime

startTimeMode

endMode

endMonth

endDay

endDayOfWeek

endTime

endTimeMode

因此你能看到,Date和Calendar类在Daylight Saving Time上有一个概念。 档我开始调查这个的时候,是summer (last year), 为了调整我们服务器所有的夏令时(DST),我将系统时间向前挪移了一个小时。因此,我认为JAVA将不会对DST进行调整。

posted on 2006-02-18 09:31 水煮三国 阅读(862) 评论(0)  编辑  收藏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.Net Core手撸一个基于Token的权限认证

说明权限认证是确定用户身份的过程。可确定用户是否有访问资源的权力今天给大家分享一下类似JWT这种基于token的鉴权机制基于token的鉴权机制,它不需要在服务端去保留用户的认证信息或者会话信息。这就意味着基于token认证机制的应用,不需要去考虑用户在哪一台服务器…

Mybatis-Generator(MBG)教程与Idea的MBG插件

简介 Mybatis Generator(MBG),下面我们统称为MBG,是一个Mybatis和iBatis的代码生成器。他可以内省数据库的表(或多个表)然后生成可以用来访问(多个)表的基础对象。这样减少了项目新建时各种配置对象&#x…

net MVC 重定向总结

[HttpPost]public ActionResult StudentList(string StudName, string studName, DateTime BirthDay, FormCollection form, string controller, string Action, StudentModels student){//其中StudName为aspx页面中标签的name属性(StudName不区分大小写)//其中BirthDay为页面中…

Android之华为meta10 pro安卓8.0绑定服务(bindService)失败解决办法

1、问题 Intent intent new Intent("com.gsta.ukeyesurfing.service.UkeyService"); boolean result bindService(intent, mKeyServiceConnection, Context.BIND_AUTO_CREATE) result结果是false, android 8.0绑定服务失败 2、解决办法 这个服务需要…

Windows Server 2008 RemoteApp---发布应用程序

本章节一起来体验RemoteApp应用程序发布功能,本功能利用了微软应用程序虚拟化技术,打个比方,我这台电脑上并没有安装Excel2010,但我现再要用Excel2010该怎么办?难道去找Office2010的光盘来安装吗?不用这么麻…

【GIS风暴】最新全球(全国)土地利用数据集下载地址大全汇总

目 录 1. GlobeLand30 2. 地理空间数据云 3. 马里兰大学数据集 4. Modis MCD12(MODQ1\MODQ2)

.NET 中密封类的性能优势

.NET 中密封类的性能优势Intro最近看到一篇文章 Performance benefits of sealed class in .NET,觉得写得不错,翻译一下,分享给大家。目前看到的一些类库中其实很多并没有考虑使用密封类,如果你的类型是不希望被继承的&#xff0c…

java 视图对象转换_java-如何从onItemSelected()方法返回的视图对象...

onItemSelected()方法应该返回一个View作为其对象之一,在这种情况下,它是一个TextView,通过在Logcat中获取该对象的描述和哈希值进行了验证,因此该View实际上是一个TextView.通过此处显示的方法返回的视图public void onItemSelected(AdapterView> parent, View view, int p…

jQuery-1.9.1源码分析系列(十) 事件系统——事件绑定

事件绑定的方式有很多种。使用了jQuery那么原来那种绑定方式(elem.click function(){...})就不推荐了,原因? 最主要的一个原因是elem.click fn这种方式只能绑定一个事件处理,多次绑定的只会保留最后一次绑定的结果。 看一下jQue…

Windows 8系统平台上应用软件安装心得

1.ArcGIS 10.2安装 需要单独安装.NET 3.5,GIS软件自带的.NET系统不识别,点击360云盘地址进行下载(提取码为:1ed3)。(另外,Win8系统上安装.NET可以参考:http://blog.csdn.net/aijavaer/article/d…

JavaFX 一 出生新手村(阅读小规则)

我就不讲IDE怎么装的,网上有的是,我仅仅是说说我学习过程中遇到的,该注意的东西 1.JavaFX刚開始出是基于脚本script开发的语言,所以网上会有流传比較多关于script的JavaFX,对于被甲骨文大大(Oracle)改版后的JavaFX已经不太有用了,如今都基本靠java代码编程了,所以网上找到的scr…

Android之jni编译出现multiple definition of ‘××××ב

1、问题 编译ndk代码的时候提示 multiple definition of 2、原因 多个文件包含同一个头文件时,在Android.mk文件里面写了2个文件 _src_files : \common/A.cpp\common/A.cpp\ 3、解决办法 去掉一个文件,然后再次编译。

Android视图绘制流程完全解析,带你一步步深入了解View(二)

转自:http://blog.csdn.net/guolin_blog/article/details/16330267 在上一篇文章中,我带着大家一起剖析了一下LayoutInflater的工作原理,可以算是对View进行深入了解的第一步吧。那么本篇文章中,我们将继续对View进行深入探究&…

C# 线程问题之死锁

过多的锁定也会有麻烦。在死锁中,至少有两个线程被挂起,并等待对方解除锁定。由于两个线程都在等待对方,就出现了死锁,线程将无限等待下去。为了说明死锁,下面实例化 StateObject 类型的两个对象,并把它们传…

java requestbody map_@RequestBody 的正确使用办法

1.以前一直以为在SpringMVC环境中,RequestBody接收的是一个Json对象,一直在调试代码都没有成功,后来发现,其实 RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象&…

Matlab图形绘制

1.正余弦曲线 例如自变量从0到10,间隔为0.1的曲线代码如下: 正弦 t 0:.1:10; y sin(t); plot(t,y); 余弦 t 0:.1:10; y cos(t); plot(t,y); 正余弦图形显示如下:

java之异常java.net.MalformedURLException解决办法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程 1、问题 日志打印 System.err W java.net.MalformedURLExceptionW at java.net.URL.<init>(URL.java:152)W at java.…

java遇见的问题分析

下面就一些java的一些基本问题进行解释。其中蓝色部分为handsomecui的主观看法 一.synchronized(obj)里面的参数怎么解释&#xff1f; synchronized的参数代表的是“对象锁”代表的是不同的线程在synchronized块里&#xff0c;同时只有一个线程能执行该代码块,而类的不同实例之…

linq中的castT()及OfTypeT()

DataTable dt...........//获取从数据库中取出的数据(假设只有一条记录) //Cast<T>()用来将非泛型的序列转换为泛型的序列 DataRow rowdt.Rows.Cast<DataRow>().Single(); //OfType<T>():用来将序列中可以转换的转换为指定的序列 如&#xff1a;一个object数…

Jar包转成Dll的方式(带嵌套的jar也能做) (转)

研究很好几天&#xff0c;终于成功了。因为写了一个Java的项目&#xff0c;现在要求要改写成C#版本的。但是其中用到了svnkit&#xff0c;svnkit是java平台的。改写成C#的话&#xff0c;要使用SharpSVN,但是SharpSVN的API文档真的很不专业。看来看去还是svnkit比较好。所以打算…