JAVA中日期类Date、日历类Calendar、DateFormat类

时间:2021-11-05 18:08:13

一、Date类

1、在JAVA API手册中Date类只有一个构造方法,其余的都已经过时了,原因是将其都抽象到了其他的类中。

      Date()——分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。

2、两个主要方法

①System.currentTimeMillis()——获取当前系统的时间戳

②setTime——设置时间

package com.brx.date;

import java.util.Date;

public class Bao1 {
public static void main(String[] args) {
// 如何忽的当前系统时间
long currentTimeMillis = System.currentTimeMillis();
System.out.println(currentTimeMillis);

// 1970 1 1 0:0:0 星期一 计算机元年 格林尼治时间——设置为0
Date d=new Date();
d.setTime(0);
System.out.println(d);//这里输出时间为1970 1 1 8:0:0,因为中国是东八区,早8点,所以元年为0:0:0
}
}
二、Calendar类

1、   根据时间戳  获得年月日时分秒,直接用代码说明

package com.brx.date;

import java.util.Calendar;
import java.util.Date;

public class Bao2 {
public static void main(String[] args) {
// 根据时间戳 获得年月日时分秒
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date()); //设置为当前系统时间戳后,再获取年月日时分秒,
//否则获取的知识计算机元年
 int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
month=month+1;// 注:代码是老外写的,他们认为月份为0—11,所以要加1
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);

System.out.println(year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second);
}
}
2、距离高考还有多少天

package com.brx.date;

import java.util.Calendar;
import java.util.Date;

public class Bao3 {
public static void main(String[] args) {
//计算距离高考还有多少天
//第一种实现方法——使用时间戳计算
{
//注:日历类不能new对象,只能通过getInstance方法获取,说明它可能是个单例模式
// 但是:通过获取两个对象并且输出知——识两个不同的对象,并不是单例模式
Calendar current = Calendar.getInstance();
Calendar next=Calendar.getInstance();
current.setTime(new Date());

next.set(Calendar.YEAR, (current.get(Calendar.YEAR))+1);
next.set(Calendar.MONTH, 5);// 6月
next.set(Calendar.DAY_OF_MONTH, 7);
next.set(Calendar.HOUR_OF_DAY, 8);
next.set(Calendar.MINUTE, 0);
next.set(Calendar.SECOND, 0);
print(current);
print(next);
System.out.println("距离高考的天数为:"+
(next.getTime().getTime()-current.getTime().getTime())/(1000*60*60*24));
// 2017-7-27 20:48:37
// 2018-6-7 8:0:0
// 距离高考的天数为:314
}

//第二种方法——使用add方法(根据日历的规则,为给定的日历字段添加或减去指定的时间量。)
{
Calendar current = Calendar.getInstance();
//current.setTime(new Date());
int year = current.get(Calendar.YEAR);
//System.out.println(year);
int i=0;
while(true){
current.add(Calendar.DAY_OF_MONTH, 1);
if(current.get(Calendar.YEAR)-year==1){
int month = current.get(Calendar.MONTH);
int day = current.get(Calendar.DAY_OF_MONTH);
if(month==6&&day==7){
break;
}
}
i++;
}
System.out.println("距离高考天数为:"+i);
}
}

private static void print(Calendar calendar) {
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
month=month+1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);

System.out.println(year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second);
}
}
3、两个修改时间量的方法

add(int field, int amount) ——(有进位)给指定的字段添加,减去时间量。这个会导致前面的字段增加或者减少(比如说日会导致月增加或者减少,月会导致年增加或者减少)
roll(int filed,int amount);给指定的字段添加,减去时间量,只会在自己的字段内转圈


三、DateFormat类

1、其子类为SimpleDateFormat

2、有两个方法

①parse——将字符串转换为日期

②format—将时间按照特定的格式转换为字符串

package com.brx.date;

import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class Bao4 {
public static void main(String[] args) throws ParseException {
//String date="2008-05-05 10:10:10";
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = s.format(new Date());
System.out.println(format);

String date="2008-05-05 10:10:10";
Date parse = s.parse(date);
System.out.println(parse.getTime());
}
}