转:java.util中的Date类

java.util中的Date类

www.linuxaid.com.cn 01-09-20 23:03 496p 处处
--------------------------------------------------------------------------------

    在JSP中,我们经常要处理有关日期和时间的信息,这时候你可以使用java.util中的Date类,在编写Java源程序时,情况很明显,你必须通过“import java.util.*”引入java.util软件包;而在编写JSP源程序时,由于Date不是JSP的默认对象,你仍然必须通过“<%@ page import="java.util.*"”引入这个软件包。此外,由于在java.sql中存在一个同名的Date类,为了将这两者正确地区分,凡是用到java.util中的Date类时,你最好将其写成java.util.Date。
    事实上,Date类并不仅仅表示日期,而是精确到毫秒。从这个角度看,也许将其称为DateTime更为合适,在本文中,我们有时也将Date称为日期,希望不会引起读者的误解。
    在谈到java.util中的Date类时,我们经常会提到UTC和GMT,这两者几乎是同一概念。它们都是指的格林尼治标准时间,只不过UTC的称呼更为正式一点。两者的区别在于前者是一个天文上的概念,而后者是基于一个原子钟。在UTC中,每一年或两年会有一个“闰秒”,而我们一般不理会这个“闰秒”,但是在Java中,这造成我们有时会出现60秒或61秒。
    Date类中有相应的方法,它可以将日期分解为年、月、日、时、分、秒,可以将其转换成一个字符串,它还可以执行反向的操作。但是从JDK1.1开始,Calendar类和Date Format类也可以执行这两类的功能,按照Java的官方文件,相应的在Date类中的方法不再推荐使用。但是在原理上,两者并没过大的差别。在本文中,我们仍将介绍这些方法,只是会作相应的注明。
    在所有情况下,这些方法所接受的参数都不需要满足有效范围;例如,一个日期如果被定义为1月32日,它将被解释为2月1日。

    一、Date的构造函数

    1.1构造一个反映当时时间的Date实例
        Date
        public Date()
        构造一个Date对象并对其进行初始化以反映当前时间。

    1.2从一个长整型数据构造一个Date实例
        Date
        public Date(long date)
        构造一个Date对象,并根据相对于GMT 1970年1月1日00:00:00的毫秒数对其进行初始化。
        参数:
            date - 相对于GMT 1970年1月1日00:00:00的毫秒数。

    1.3从年月日时分秒构造一个Date实例
        Date
        public Date(int year,
                    int month,
                    int date)
        public Date(int year,
                    int month,
                    int date,
                    int hrs,
                    int min)
        public Date(int year,
                    int month,
                    int date,
                    int hrs,
                    int min,
                    int sec)
        这三个构造函数均不推荐使用,在JDK 1.1版中,分别被Calendar.set(year + 1900, month, date)或GregorianCalendar(year + 1900, month, date)、Calendar.set(year + 1900, month, date, hrs, min)或 GregorianCalendar(year + 1900, month, date, hrs, min)、Calendar.set(year + 1900, month, date, hrs, min, sec)或GregorianCalendar(year + 1900, month, date, hrs, min, sec)代替。

        构造一个Date对象,并分别将其初始化为year、month和date所对应日期的开始时间(即午夜)、year、month、date、hrs和min所对应分钟的开始时间、year、month、date、hrs、 min和sec所对应秒的开始时间。
        参数:
            year - 年份减去1900。
            month - 月份在0-11之间。
            date - 日期在1-31之间。
            hrs - 小时在0-23之间。
            min - 分钟在0-59之间。
            sec - 秒在0-59之间。

    1.4从一个字符串构造一个Date实例
        Date
        public Date(String s)
        不推荐使用。 在JDK 1.1版中,被DateFormat.parse(String s)代替。
        构造一个Date对象,并将其初始化为字符串s所对象的日期和时间。对字符串的解析将和parse(java.lang.String)方法一样。
        参数:
            s - 一个反映日期的字符串。

    二、其它方法

    2.1将一个字符串转换成Date对象相应的长整形表示
    parse
    public static long parse(String s)
    不推荐使用。 在JDK 1.1版中,被DateFormat.parse(String s)代替。
    试图将字符串s作为日期和时间的表示来解析。如果解析是成功的,将返回相对于GMT 1970年1月1日00:00:00的毫秒数。反之,将抛出IllegalArgumentException例外。
    它可以接受许多语句格式;具体地说,它可以理解这种格式:"Sat, 12 Aug 1995 13:30:00 GMT"。它也可以理解U.S.这样的时区缩写,但是通常,我们这样表示时区:"Sat, 12 Aug 1995 13:30:00 GMT+0430"。如果没指明时区,那就表示默认当前的时区。在这里,GMT和UTC表示相同的概念。
    字符串s是从左到右进行处理的。在“(”和“)”之间的字符将被忽略。括号可以嵌套。此外,该字符串只能包含以下字符:
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789,+-:/
和空格。
    在该字符串中出现的数字将按以下规则解析:
    如果一个数字以+或-开头,而且年份已经被验证,那么这个数字将被认为是时区设置。如果这个数字小于24,这代表是时区偏移的小时。否则,就是时区偏移的分钟。符号-表示西部的时区。时区设置总是相对于UTC的。这样,例如,-5表示"格林尼治西5小时",而+0430 表示"格林尼治东4小时30分"。你也可以使用冗余的字符:GMT、UT和UTC。例如,GMT-5或utc+0430。
    如果满足下列条件之一,这个数字将表示年份:
    1、数字等于或大于70而且后面跟着一个空格、逗号或斜杠,或者是在字符串的结尾。
    2、如果数字小于70,而且月份或日期已经被定义。
    如果表示年份的数字小于100,这是一个缩写,表示在当前的80年之前、19年之后的一个区间中一个年份。如果当前是1999年,那么19到99表示1919到1999,而0到18表示2000到2018。这里需要特别注意和SimpleDateFormat中的不同。
    如果数字后面跟着一个冒号,这表示小时,除非小时已经被定义。在小时已经被定义的情况下,这表示分钟。
    如果数字后面跟着一个斜杠,这表示月份(这里0到11表示一到十二月),除非月份已经被定义。在月份已经被定义的情况下,这表示日期。
    如果数字后面跟着一个空格、逗号或连字号,或者是在字符串的结尾,在已经定义了小时但还没有定义分钟的情况下,这表示分钟;在已经定义了小时和分钟但还没有定义秒的情况下,这表示秒;否则这表示日期。
    在该字符串中出现的字母将按以下规则解析:
    AM(忽略大小写),将被忽略(但是如果小时未被定义、小于1或大于12,解析将失败)。
    PM(忽略大小写),将在小时后加12(但是如果小时未被定义、小于1或大于12,解析将失败)。
    SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY和SATURDAY以及它们的前缀(忽略大小写),将被忽略。例如sat, Friday, TUE和Thurs都将被忽略。
    此外,JANUARY、FEBRUARY、MARCH、APRIL、MAY、JUNE、JULY、AUGUST、SEPTEMBER、OCTOBER、NOVEMBER和DECEMBER以及它们的前缀(忽略大小写),将按这里的顺序被视为表示月份并将其转换成数字(0 to 11)。例如,aug, Sept, april和NOV都表示月份。而Ma将被理解为MARCH而不是MAY。
    GMT, UT和UTC(忽略大小写),将被视为UTC。
    EST, CST, MST和PST(忽略大小写),将被视为北美的时区,分别是格林尼治西5小时、6小时、7小时、8小时。而EDT, CDT, MDT和PDT表示同一概念。
    当全部字符串被扫描时,如果时区被定义,时间被认为是UTC的时间,然后再应用时区。否则,时间指当前时区的时间。
    参数:
        s - 一个作为日期解析的日期。
    返回:
        相对于GMT 1970年1月1日00:00:00的毫秒数。
    2.2获取Date对象中的年、月、日、时、分、秒元素以及星期
    getYear
    public int getYear()
    getMonth
    public int getMonth()
    getDate
    public int getDate()
    getDay
    public int getDay()
    getHours
    public int getHours()
    getMinutes
    public int getMinutes()
    getSeconds
    public int getSeconds()
    这组方法均不推荐使用。 JDK 1.1版中,分别被Calendar.get(Calendar.YEAR) - 1900、Calendar.get(Calendar.MONTH)、Calendar.get(Calendar.DAY_OF_MONTH)、Calendar.get(Calendar.DAY_OF_WEEK)、Calendar.get(Calendar.HOUR_OF_DAY)、Calendar.get(Calendar.MINUTE)、Calendar.get(Calendar.SECOND)代替。
    其功能依次为:
    返回Date所对应年份减去1900。
    返回Date对象所对应的月份。返回值在0到11之间,0表示1月。
    返加这个Date对象的日期。返回值在1到31之间。
    返回这个日期的星期。(0 = 星期天, 1 = 星期一, 2 = 星期二, 3 = 星期三, 4 = 星期四, 5 = 星期五, 6 = 星期六)
    返加这个Date对象的小时。返回值是一个0到23的数字。
    返回这个日期的分钟,返回值在0到59之间。
    返回日期的秒。返回值在0到61之间。60和61 仅仅在Java虚拟机在处理闰秒时出现。

    2.3设置Date对象中的年、月、日、时、分、秒元素
    setYear
    public void setYear(int year)
    setMonth
    public void setMonth(int month)
    setDate
    public void setDate(int date)
    setHours
    public void setHours(int hours)
    setMinutes
    public void setMinutes(int minutes)
    setSeconds
    public void setSeconds(int seconds)
    这组方法均不推荐使用。在JDK 1.1版中,分别被Calendar.set(Calendar.YEAR, year + 1900)、Calendar.set(Calendar.MONTH, int month)、Calendar.set(Calendar.DAY_OF_MONTH, int date)、Calendar.set(Calendar.HOUR_OF_DAY, int hours)、Calendar.set(Calendar.MINUTE, int minutes)、Calendar.set(Calendar.SECOND, int seconds)代替。
    其功能依次为:
    设置Date对象的年份为指定值加1900。Date对象的其它属性不变(如果日期是2月29日,而所设置的年是非闰年,新的日期将是3月1日。)
    设置日期的月份为指定值。日期的其它元素不变。如果日期是10月31日,而现在月份设为6月,新的日期将是7月1日,因为6月只有30天。
    设置Date对象的日期为指定值。日期的其它元素不变。如果日期是4月31日,而现在日期设为31日,新的日期将是5月1日,因为4月只有30天。
    设置这个Date对象的小时,日期的其它元素不变。
    设置这个Date对象的分钟为指定值,日期的其它元素不变。
    将这个Date对象的秒设置为指定值。对象的其它属性不变。
    其参数依次为:
        year - 年份。
        month - 月份在0-11之间。
        date - 日期在1-31之间。
        hours - 小时值。
        minutes - 分钟。
        seconds - 秒。

    2.4两个日期对象的比较
    before
    public boolean before(Date when)
    after
    public boolean after(Date when)
    equals
    public boolean equals(Object obj)
    compareTo
    public int compareTo(Date anotherDate)
    compareTo
    public int compareTo(Object o)
    其功能依次为:
    测试这个日期是否在指定日期之前。
    测试这个日期是否在指定日期之后。
    比较两个日期是否相等。当且仅当参数不为空,而且参数与这个Date对象完全相等时(精确到毫秒级),返回true。事实上,两个Date对象相等,也就是说getTime方法返回同一个长整型数据。
    比较两个日期的顺序。
    将这个日期与另一个对象比较。如果这个对象是一个日期,其功能将与compareTo(Date)完全相似。否则会抛出一个ClassCastException例外(因为日期只能与另一个日期比较)。
    其参数依次为:
        when - 一个日期。
        when - 一个日期。
        obj - 用来比较的对象。
        anotherDate - 用来比较的Date。
        o - 用来比较的Object。
    返回依次为:
    当且仅当这个Date对象早于when时返回true;否则返回false。
    当且仅当这个Date对象迟于when时返回true;否则返回false。
    两个对象相等时返回true,否则返回false。
    如果两个日期相等返回0;如果日期在参数值之前返回小于0的数值;如果日期在参数值之前返回大于0的数值。
    如果两个日期相等返回0;如果日期在参数值之前返回小于0的数值;如果日期在参数值之前返回大于0的数值。

    2.5日期对象及其对应的长整型表示
    getTime
    public long getTime()
    返回这个Date对象相对于GMT 1970年1月1日00:00:00的毫秒数。
    返回:
    相对于GMT 1970年1月1日00:00:00的毫秒数。

    setTime
    public void setTime(long time)
    按照相对于GMT 1970年1月1日00:00:00的毫秒数设置这个Date对象。
    参数:
    time - 毫秒数。
  
    2.6其它
    clone
    public Object clone()
    返回这个对象的一个拷贝。
    返回:
    这个实例的一个拷贝。
    抛出:
    CloneNotSupportedException - 如果这个对象的类不支持Cloneable接口。将抛出这个例外。
    OutOfMemoryError - 没有足够的内存。

    UTC
    public static long UTC(int year,
                           int month,
                           int date,
                           int hrs,
                           int min,
                           int sec)
    不推荐使用。 在JDK 1.1版中,被Calendar.set(year + 1900, month, date, hrs, min, sec)或GregorianCalendar(year + 1900, month, date, hrs, min, sec), (使用UTC TimeZone),跟随在Calendar.getTime().getTime() 后面所代替。
    根据参数确定日期和时间。这个参数被解析为年、月、日、时、分、秒。就和在Date 构造函数中一样,只不过是使用的UTC而不是使用当前时区。这个时间将被表示为相对于GMT 1970年1月1日00:00:00的毫秒数。
    参数:
        year - 年份减去1900。
        month - 月份在0-11之间。
        date - 日期在1-31之间。
        hrs - 小时在0-23之间。
        min - 分钟在0-59之间。
        sec - 秒在0-59之间。
    返回:
    参数所对应日期相对于GMT 1970年1月1日00:00:00的毫秒数。

    hashCode
    public int hashCode()
    返回这个对象的hash代码值,也就是说对getTime()方法返回的长整型数值作如下运算:
        (int)(this.getTime()^(this.getTime() >>> 32))
    返回:
    这个对象的hash代码值。

    toString
    public String toString()
    将这个Date对象转换成如下格式的String:
    dow mon dd hh:mm:ss zzz yyyy
    在这里:
    dow是星期(Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
    mon是月份(Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)。
    dd是日期(01到31),用两位数字表示。
    hh是小时(00到23),用两位数字表示。
    mm是分钟(00到59),用两位数字表示。
    ss是秒(00到61,用两位数字表示。
    zzz是时区。标准的时区的缩写和在parse方法中的一样。如果时区信息无效zzz为空 - 也就是说,不包含任何字符。
    yyyy是年份,用四位数字表示。
    返回:
    表示这个日期的字符串。

    toLocaleString
    public String toLocaleString()
    不推荐使用。 JDK 1.1版中,被DateFormat.format(Date date)代替。
    按照当前格式生成反映这个Date对象的字符串。这种格式字符串对于Java应用程序开发员应该是相当熟悉的。然而,它与ISO C中strftime()函数的"%c"格式并不完全相同。
    返回:
    反映这个日期的字符串,使用当前的约定。

    toGMTString
    public String toGMTString()
    不推荐使用。 JDK 1.1版中,被DateFormat.format(Date date)(使用GMT 时区)代替。
    按以下格式建立一个反映这个Date对象的字符串: d mon yyyy hh:mm:ss GMT
    其中:
    d日期(1到31),用一到两位数字表示。
    mon月份(Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)。
    yyyy年份,用四位数字表示。
    hh小时(00到23),用两位数字表示。
    mm分钟(00到59),用两位数字表示。
    ss秒(00到61),用两位数字表示。
    GMT指定为格林尼治标准时。
    返回值与当前时区无关。
    返回:
    反映当前日期的字符串(使用Internet GMT)。

    getTimezoneOffset
    public int getTimezoneOffset()
    不推荐使用。 JDK 1.1版中,被Calendar.get(Calendar.ZONE_OFFSET) + Calendar.get(Calendar.DST_OFFSET)代替。
    返回时区,精确到分钟。
    例如,在麻萨诸塞州,应该是格林尼治西5小时:
    new Date(96, 1, 14).getTimezoneOffset()返回300,因为在1996年1月14日,使用标准时间(东部标准时);但是,new Date(96, 5, 1).getTimezoneOffset()返回240,因为在1996年5月1日,使用夏令时(东部夏令时)。
    这个方法返回值和下列计算的结果一样:
    (this.getTime() - UTC(this.getYear(),
                          this.getMonth(),
                          this.getDate(),
                          this.getHours(),
                          this.getMinutes(),
                          this.getSeconds())) / (60 * 1000)
    返回值:
    当前时区的设置,精确到分钟。

时间: 2024-09-12 22:38:37

转:java.util中的Date类的相关文章

string-JAVA 中日期date类的问题

问题描述 JAVA 中日期date类的问题 import java.sql.Date; public class we { public static void main(String[] args) { Date d1=new Date(); Date d2=new Date("114020303034L"); 为什么会出现The constructor Date() is undefined的问题.求解决 解决方案 导入的包不对,改为import java.util.Date 其次

java开发中通用分页类代码

java开发中通用分页类代码 在java中要分页我们必须要有数据库教程,所以我们先准备下数据库,其数据库脚步如下: --以下是创建数据库和数据库表以及向数据库插入数据   use master  Go  if exists(select * from sysdatabases where name='pagination')  drop database pagination  Go  create database pagination  Go  use pagination  Go  cre

Java编程中的vector类用法学习笔记_java

java.util.vector提供了向量类(vector)以实现类似动态数组的功能.在Java语言中没有指针的概念,但如果正确灵活地使用指针又确实可以大大提高程序的质量.比如在c,c++中所谓的"动态数组"一般都由指针来实现.为了弥补这个缺点,Java提供了丰富的类库来方便编程者使用,vector类便是其中之一.事实上,灵活使用数组也可以完成向量类的功能,但向量类中提供大量的方法大大方便了用户的使用. 创建了一个向量类的对象后,可以往其中随意插入不同类的对象,即不需顾及类型也不需预先

sqlserver中获取date类的年月日语句_MsSql

select * from 表名 where Convert(varchar(100),日期字段,23)='2008-12-15' 再给你个Convert函数的应用: 复制代码 代码如下: Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06 Select CONVERT(varchar(100), GETDATE(),

sqlserver中获取date类的年月日语句

select * from 表名 where Convert(varchar(100),日期字段,23)='2008-12-15' 再给你个Convert函数的应用: 复制代码 代码如下: Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06 Select CONVERT(varchar(100), GETDATE(),

Java中Date类和Calendar类的常用实例小结_java

前言写后台程序的时候,经常需要存储当前服务器的时间戳,使用时间戳也很方便,客户端和服务器端都可以根据自己的需求做各自的转换 在php里,获取当前时间戳使用time()函数,格式化输出通过Date()函数即可,Java里相对复杂一些,这里简单介绍一下 Java语言中的Calendar,Date,DateFormat组成了Java标准的一个基本但是非常重要的部分.日期是商业逻辑计算一个关键的部分,所有的开发者都应该能计算未来的日期,定制日期的显示格式,并将文本数据解析成日期对象 获取UNIX时间戳在

java 中的常用类

Java 中的包装类 相信各位小伙伴们对基本数据类型都非常熟悉,例如 int.float.double.boolean.char 等. 基本数据类型是不具备对象的特性的,比如基本类型不能调用方法.功能简单..., 为了让基本数据类型也具备对象的特性, Java 为每个基本数据类型都提供了一个包装类,这样我们就可以像操作对象那样来操作基本数据类型. 包装类主要提供了两大类方法: 1. 将本类型和其他基本类型进行转换的方法 2. 将字符串和本类型及包装类互相转换的方法         Integer

详解Java正则表达式中Pattern类和Matcher类_java

前言 本文将介绍Java正则表达式中的Pattern类与Matcher类.首先我们要清楚指定为字符串的正则表达式必须首先被编译为pattern类的实例.因此如何更好的了解这两个类,是编程人员必须知道的. 以下我们就分别来看看这两个类: 一.捕获组的概念 捕获组可以通过从左到右计算其开括号来编号,编号是从1 开始的.例如,在表达式 ((A)(B(C)))中,存在四个这样的组: 1 ((A)(B(C))) 2 (A) 3 (B(C)) 4 (C) 组零始终代表整个表达式. 以 (?) 开头的组是纯的

仔细触摸Java编程中的“文档”和“包”

编程 什么是包 Java中的包(Package)其实指的就是目录,它是为了更好地管理Java类(Class)和接口(Interface).Java语言的包可以被另一个Java开发包所使用.如果我们要引用某个包中的类,用import关键字来标明即可.比如: import java.util. date=new Date  提示:import java.util.表示java.util中的所有公有类和接口被引入到当前包.这里的匹配符可以调入多个类名. 常用的Java标准包 JDK为我