Java 日期时间

2022年7月13日
大约 7 分钟

Java 日期时间

Java在java.util包中提供了Date类,这个类封装了当前日期和时间,Date类支持两种构造函数。第一种无参构造函数初始化对象new Date(),另外一种有参构造函数,自当前日期凌晨起经过的毫秒数new Date(long millisec)。

Date类调用方法

SN方法和描述
1boolean after(Date date)
如果调用Date对象包含或晚于指定的日期则返回true,否则,返回false。
2boolean before(Date date)
如果调用Date对象包含或早于日期指定的日期返回true,否则,返回false。
3Object clone( )
重复调用Date对象。
4int compareTo(Date date)
比较日期的调用对象的值。如果这两个值相等返回0。如果调用对象是早于日期返回一个负值。如果调用对象最迟日期返回正值。
5int compareTo(Object obj)
操作以相同的compareTo(Date) 如果obj是一个类日期。否则,它会抛出一个ClassCastException。
6boolean equals(Object date)
如果调用Date对象包含相同的时间及日期指定日期则返回true,否则,返回false。
7long getTime( )
返回自1970年1月1日起已经过的毫秒数。
8int hashCode( )
返回调用对象的哈希代码。
9void setTime(long time)
设置所指定的时间,这表示经过时间以毫秒为单位,1970年1月1日从午夜的时间和日期
10String toString( )
调用Date对象转换为字符串,并返回结果。

获取当前日期和时间

在Java中得到当前的日期和时间。可以使用一个简单的Date对象的toString()函数,实例如下:

package com.yoodb.blog;
import java.util.Date;

public class DateDemo {
    public static void main(String args[]) {
        // 实例化日期对象
        Date date = new Date();
        System.out.println(date.toString());
    }
}

运行结果如下:

Wed Aug 16 10:11:58 CST 2017

日期比较:

使用getTime()函数来获得自1970年1月1日凌晨时,起已经过的毫秒数,然后比较两个对象的值。

使用compareTo()函数,这是由Comparable接口定义和日期执行。

使用SimpleDateFormat格式化日期

SimpleDateFormat是一个具体的类,用于格式化和分析日期的语言环境敏感的方式。 SimpleDateFormat先选择任何用户定义的模式为日期时间格式。

实例:

import java.util.*;
import java.text.*;

public class DateDemo {
    public static void main(String args[]) {
          Date dNow = new Date( );
          SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
          System.out.println("当前时间: " + ft.format(dNow));
    }
}

运行结果如下:

当前时间: 星期三 2017.08.16 at 10:19:48 上午 CST

使用时间模式字符串(日期和时间的格式化编码表)。在这个模式中,所有的ASCII字母被保留为模式字母,其定义如下:

字母描述示例
G纪元标记AD
y四位年份2017
M月份                March or 17
d一个月的某一日期17
h A.M./P.M. (1~12)格式小时12
H一天中的小时 (0~23)23
m分钟数24
s秒数54
S毫秒数212
E星期几Tuesday
D一年中的某一天251
F一个月中第几周的周几2 (second Wed. in July)
w一年中第几周40
W一个月中第几周1
aA.M./P.M. 标记PM
k一天中的小时(1~24)24
K A.M./P.M. (0~11)格式小时10
z时区Eastern Standard Time
'文字定界符Delimiter
"单引号`

使用printf格式化日期

日期和时间格式用printf方法可以非常轻松地做到。您可以使用两个字母的格式,从t和在下面给出的表格中的其中一个字母结束。

实例:

import java.util.Date;
public class DateDemo {
    public static void main(String args[]) {
        // 初始化日期对象
        Date date = new Date();
        // 时间转成字符串输出
        String str = String.format("当前日期或时间 : %tc", date );
        System.out.printf(str);
    }
}

运行结果如下:

当前日期或时间 : 星期三 八月 16 10:24:27 CST 2017

日期和时间转换字符

字符描述实例
cComplete date and timeMon May 17 10:25:57 CDT 2017
FISO 8601 date2017-08-16
DU.S. formatted date (month/day/year)08/16/2017
T24-hour time19:05:15
r12-hour time07:05:15 pm
R24-hour time, no seconds19:05
YFour-digit year (with leading zeroes)2017
yLast two digits of the year (with leading zeroes)17
CFirst two digits of the year (with leading zeroes)20
BFull month nameFebruary
bAbbreviated month nameFeb
mTwo-digit month (with leading zeroes)08
dTwo-digit day (with leading zeroes)03
eTwo-digit day (without leading zeroes)9
AFull weekday nameMonday
aAbbreviated weekday nameMon
jThree-digit day of year (with leading zeroes)069
HTwo-digit hour (with leading zeroes), between 00 and 2318
kTwo-digit hour (without leading zeroes), between 0 and 2318
ITwo-digit hour (with leading zeroes), between 01 and 129
lTwo-digit hour (without leading zeroes), between 1 and 129
MTwo-digit minutes (with leading zeroes)05
STwo-digit seconds (with leading zeroes)19
LThree-digit milliseconds (with leading zeroes)476
NNine-digit nanoseconds (with leading zeroes)611000000
PUppercase morning or afternoon markerPM
pLowercase morning or afternoon markerpm
zRFC 822 numeric offset from GMT-0800
ZTime zonePST
sSeconds since 1970-01-01 00:00:00 GMT1502850876
QMilliseconds since 1970-01-01 00:00:00 GMT1502850903515