Java 日期时间

Date

java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。
第一个构造函数使用当前日期和时间来初始化对象。

// 使用该构造函数创建对象,获取到当前的时间
Date date = new Date();
//输出为:Thu Jul 12 16:32:16 CST 2018

第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数.

//使用该构造函数创建对象,获取到从1970-1-1起加上你输入的毫秒数,然后转成Date型
Date date = new Date(12);
System.out.println(date);
//输出为:Thu Jan 01 08:00:00 CST 1970

当我们创建Date对象之后,可以设置自1970-1-1 00:00:00 GMT以后time毫秒数设置时间和日期

//用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。
void setTime(long time)
使用
date.setTime(50);
System.out.println(date);
//输出为:Thu Jan 01 08:00:00 CST 1970

long getTime()返回的是自 1970 年 1 月 1 日 00:00:00 GMT 以来, Date 对象表示的毫秒数。

Date date = new Date();
System.out.println(date.getTime());
//输出为:1531386321754

Date类的使用方法

序号 方法和描述
1 boolean after(Date date)
若当调用此方法的Date对象在指定日期之后返回true,否则返回false。
2 boolean before(Date date)
若当调用此方法的Date对象在指定日期之前返回true,否则返回false。
3 Object clone( )
返回此对象的副本。
4 int compareTo(Date date)
比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
5 int compareTo(Object obj)
若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。
6 boolean equals(Object date)
当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。
7 long getTime( )
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
8 int hashCode( )
返回此对象的哈希码值。
9 void setTime(long time)
用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。
10 String toString( )
转换Date对象为String表示形式,并返回该字符串。

获取当前日期时间

Java中获取当前日期和时间很简单,使用Date对象的 toString()方法来打印当前日期和时间,如下所示:

import java.util.Date;
  
public class DateDemo {
   public static void main(String args[]) {
        String strDate, strTime = "";
    Date date = new Date();
    System.out.println("今天的日期是:" +date);
    long time = date.getTime();
    System.out.println("自1970年1月1日起以毫秒为单位的时间(GMT):" + time);
    strDate = date.toString();
    //提取 GMT 时间
    strTime = strDate.substring(11,(strDate.length()-4));
    //按小时,分钟和秒提取时间
    strTime = "时间:" + strTime.substring(0,8);
    System.out.println(strTime);
   }
}

以上实例编译运行结果如下:

今天的日期是:Thu Jun 28 16:37:47 CST 2018
自1970年1月1日起以毫秒为单位的时间(GMT):1530175067129
时间:16:37:47

日期比较

Java使用以下三种方法来比较两个日期:

  • 使用getTime( ) 方法获取两个日期(自1970年1月1日经历的微秒数值),然后比较这两个值。
  • 使用方法before(),after()和equals()。例如,一个月的12号比18号早,则new Date(99, 2, 12).before(new Date (99, 2, 18))返回true。
  • 使用compareTo()方法,它是由Comparable接口定义的,Date类实现了这个接口。

SimpleDateFormat

使用SimpleDateFormat格式化日期

SimpleDateFormat是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat允许你选择任何用户自定义日期时间格式来运行。例如:

import java.util.Date;
import java.text.SimpleDateFormat;
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("Current Date: " + ft.format(dNow));
    }
}

以上实例编译运行结果如下:

Current Date: 星期四 2018.06.28 at 09:53:48 下午 CST

简单的DateFormat格式化编码

时间模式字符串用来指定时间格式. 在此模式中,所有的ASCII字母被保留为模式字母,定义如下:

字母 描述 表示 示例
G 纪元标记 Test AD
y 四位年份 Year 2001
M 月份 Month July or 07
d 一个月的日期 Number 10
h A.M./P.M. (1~12)格式小时 Number 12
H 一天中的小时 (0~23) Number 22
m 分钟数 Number 30
s 秒数 Number 55
S 毫妙数 Number 234
E 星期几 Test Tuesday
D 一年中的日子 Number 360
F 一个月中第几周的周几 Number 2 (second Wed. in July)
w 一年中第几周 Number 40
W 一个月中第几周 Number 1
a A.M./P.M. 标记 Test PM
k 一天中的小时(1~24) Number 24
K A.M./P.M. (0~11)格式小时 Number 10
z 时区 General time zone Eastern Standard Time
Z 时区 RFC 822 time zone -0800
' 文字定界符 Delimiter
" 单引号 `

使用printf格式化日期

printf方法可以很轻松地格式化时间和日期。使用两个字母格式,它以t开头并且以下面表格中的一个字母结尾。例如:

import java.util.Date;

public class DateDemo {
    
    public static void main(String args[]) {
        
        //初始化 Date 对象
        Date date = new Date();
        // 使用 toString()显示日期和时间
        String str = String.format("Current Date/Time : %tc", date);
        System.out.printf(str);
    }
}

以上实例编译运行结果如下:

Current Date/Time : 星期四 六月 28 22:07:35 CST 2018

如果你需要重复提供日期,那么利用这种方式来格式化它的每一部分就有点复杂了.因此,可以利用一个格式化字符串指出要被个刷的参数的索引.
索引必须紧跟在%后面,而且必须以$结束.例如:

import java.util.Date;

public class TestDemo {
    
    public static void main(String args[]) {
        
        //初始化 Date 对象
        Date date = new Date();
        // 使用 toString()显示日期和时间
        System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
    }
}

以上实例编译运行结果如下:

Due date: 六月 28, 2018

或者,你可以使用<标志.它表明先前被格式化的参数要被再次使用.例如:

import java.util.Date;

public class DateDemo {
    
    public static void main(String args[]) {
        
        //初始化 Date 对象
        Date date = new Date();
        // 使用 toString()显示日期和时间
        System.out.printf("%s %tB %

以上实例编译运行结果如下:

Due date: 六月 28, 2018

Calendar类

java.util.Calendar类是一个抽象类,在某一特定的瞬间或日历上,提供年、月、日、小时之间的转换方法。

public abstract class Calendar extends Objectimplements Serializable, Cloneable, Comparable

该类被abstract所修饰,说明不能通过new的方式来获得实例,对此,Calendar提供了一个类方法getInstance,以获得此类型的一个通用的对象,getInstance方法返回一个Calendar对象(该对象为Calendar的子类对象),其日历字段已由当前日期和时间初始化:

Calendar calendar = Calendar.getInstance();
//获取当前时间
System.out.println(calendar.getTime());
//获取当前毫秒数
System.out.println(calendar.getTimeInMillis()); 

为了更加便捷的堆日期进行操作,Calendar类对YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间1970年1月1日的00:00:00.000,格里高利历)的偏移量。
下面是Calendar常用的方法

        Calendar calendar = Calendar.getInstance();
        //获取年
        int year = calendar.get(Calendar.YEAR);
        //获取月,这里需要月份的范围是0~11,因此获取月份的时候需要+1才是当前月份值
        int month = calendar.get(Calendar.MONTH) + 1;
        //获取日
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        
        //获取时
        int hour = calendar.get(Calendar.HOUR);
        //获取分
        int minute = calendar.get(Calendar.MINUTE);
        //获取秒
        int second = calendar.get(Calendar.SECOND);
        //获取星期,英语国家星期从星期日开始计算
        int weekday = calendar.get(Calendar.DAY_OF_WEEK);
        //输出时间
        System.out.println("现在是" + year + "年" + month + "月" + day +"日"
                + hour + "时" + minute + "分" + second + "秒" + "星期" + weekday);

输出:现在是2018年7月12日7时6分40秒星期5

一年后的今天

Calendar calendar = Calendar.getInstance();
//在年的基础上加1
calendar.add(Calendar.YEAR, 1);
//获取年
int year = calendar.get(Calendar.YEAR);
//获取月
int month = calendar.get(Calendar.MONDAY) + 1;
//获取日
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("一年后的今天:" + year + "年" + month + "月" + day + "日");

获取任意一个月的最后一天

Calendar calendar = Calendar.getInstance();
//获取任意一个月的最后一天
//假设求7月的最后一天
int currentMonth = 7;
//先求出8月份的第一天,实际中这里7为外部传递进来的currentMonth变量
calendar.set(calendar.get(Calendar.YEAR), currentMonth, 1);
calendar.add(Calendar.DATE, -1);
//获取日
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("7月份的最后一天为:" + day + "号");

设置日期

//设置日期
calendar.set(Calendar.YEAR, 2000);
System.out.println("现在是" + calendar.get(Calendar.YEAR) + "年");
        
calendar.set(2008, 8, 8);
//获取年
int year = calendar.get(Calendar.YEAR);
//获取月
int month = calendar.get(Calendar.MONTH);
//获取日
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("现在是" + year + "年" + month + "月" + day + "日");
方法 描述
public static Calendar getInstance() 获取Calendar对象
public int get(int field) 获取时间的某个值
public void add(int field, int amount) 在当前时间的基础上加上一段时间
public final void set(int year, int month, int date) 设置时间点
字段 描述
DAY_OF_MONTH 表示一个月中的某天
DAY_OF_WEEK 表示一个星期中的某天
DAY_OF_YEAR 表示当前年中的天数
HOUR_OF_DAY 表示一天中的小时
YEAR 表示年份
MONTH 表示月份
WEEK_OF_MONTH 表示单签月中的星期数

你可能感兴趣的:(Java 日期时间)