Date/Calendar/LocalDateTime日期类的使用

java.util.Date

构造方法

Date类重写了toString方法输出的不再是一个对象的内存地址, 默认的输出格式Thu Mar 05 10:51:06 CST 2020(这个格式对我们不友好 , 需要对日期格式化)

方法名 功能
Date() 获取系统当前时间对象(精确到毫秒的系统当前时间)
Date(long time) 通过指定毫秒数得到其对应的时间对象 , 默认从1970-01-01 00:00:00 000开始 , 但我们是北京时间 , 所以从1970-01-01 08:00:00 000开始
public class DateTest01 {
    public static void main(String[] args) throws Exception {
        // 获取系统当前时间对象(精确到毫秒的系统当前时间)
        Date nowTime = new Date();
        // 输出格式: Thu Mar 05 10:51:06 CST 2020
        System.out.println(nowTime); 
        
        // 通过指定毫秒数得到其对应的时间对象
        Date time = new Date(1); 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
        String strTime = sdf.format(time);
        // 北京是东8区差8个小时,1970-01-01 08:00:00 001
        System.out.println(strTime); 

        // 获取昨天的此时的时间
        Date time2 = new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24);
        String strTime2 = sdf.format(time2);
        // 2020-03-04 11:44:14 829
        System.out.println(strTime2); 
    }
}

java.text.SimpleDateFormat格式化

SimpleDateFormat专门负责日期格式化的对象 , 可以将Date对象按照指定的规范格式化为字符串

  • yyyy年 , MM月, dd日 , HH时(24小时) , hh(12小时) , mm分 , ss秒 , SSS毫秒(1000毫秒代表1秒), E星期
  • 在日期格式的字符串中,除了y M d H m s S这些字符不能随便写之外,剩下的符号格式自己随意组织

Date/Calendar/LocalDateTime日期类的使用_第1张图片)

方法名 功能
SimpleDateFormat(String str) 创建一个SimpleDateFormat指定日期转换的格式 , 除了y M d H m s S这些字符不能随便写之外,剩下的符号格式可随意组织
String format(Date) 将日期对象按照指定的格式进行转换 , 返回一个字符串
Date parse(time) 将日期字符串String转换成Date类型 , 字符串的日期格式和SimpleDateFormat对象指定的日期格式要一致

将日期类型按照指定的格式进行转换:Date转换成具有一定格式的日期字符串String(格式化三要素日期对象 , 格式化对象 , 对日期进行格式化)

// 获取系统当前时间(精确到毫秒的系统当前时间)
Date nowTime = new Date();

//按照规范规定转换的格式 , 除了y M d H m s S这些字符不能随便写之外,剩下的符号格式可随意组织
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
//SimpleDateFormat sdf = new SimpleDateFormat("yy/MM/dd HH:mm:ss");
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy 年 MM 月 dd 日 hh:mm:ss E");

//将日期对象按照指定的格式进行转换
String nowTimeStr = sdf.format(nowTime);
System.out.println(nowTimeStr);        

将日期字符串String转换成Date类型(格式化三要素日期字符串 , 格式化对象 , 通过字符串得到日期对象)

  • 字符串的日期格式和SimpleDateFormat对象指定的日期格式要一致, 不然会出现java.text.ParseException异常
//指定一个日期字符串
String time = "2008-08-08 08:08:08 888";

//SimpleDateFormat sdf2 = new SimpleDateFormat("格式不能随便写,要和日期字符串格式相同");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");

//将日期字符串String转换成Date类型
Date dateTime = sdf2.parse(time);
//Fri Aug 08 08:08:08 CST 2008 , Date重写的toString方法没有显示毫秒
System.out.println(dateTime); 

java.util.Calendar

Calendar 是一个抽象类并且构造器是私有的 , 无法直接创建对象 ,需要通过静态的getInstance()方法来获取实例

  • 提供了大量的字段用于存储日期对象的信息并提供对应的方法方便我们获取信息 , 我们可以根据需要自己组合来输出
  • 不支持日期格式化,并且不是线程安全的,不能处理闰秒(每隔2天多出1s)
//创建日历类对象
Calendar c = Calendar.getInstance();
//toString 方法默认以属性="值"的形式输出时间的信息
System.out.println("c=" + c);

// 获取日期对象的某个字段
System.out.println("年:" + c.get(Calendar.YEAR)); 
System.out.println("月:" + (c.get(Calendar.MONTH) + 1));//返回月的时候,是按照0开始编号 需要我们加1
System.out.println("日:" + c.get(Calendar.DAY_OF_MONTH));
System.out.println("小时:" + c.get(Calendar.HOUR));
System.out.println("分钟:" + c.get(Calendar.MINUTE));
System.out.println("秒:" + c.get(Calendar.SECOND));

//Calender 没有专门的格式化方法,所以需要程序员自己来组合显示
System.out.println(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" +c.get(Calendar.DAY_OF_MONTH) +" " + c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND) );

常用属性和方法

Calendar 类一定也重写了toString 方法输出的不再是一个对象的内存地址, 默认以属性="值"的形式输出日期对象的信息

  • YEAR(年), MONTH(月) , DAY_OF_MONTH(日), DAY_OF_WEEK(周),HOUR((12小时制 )/HOUR_OF_DAY ( 24小时制), MINUTE/SECOND(分秒)
方法名 功能
static Calendar getInstance() 返回一个日期对象
get(日期字段) 获取日期对象中的某个年月日字段的信息 ,月是按 0 开始编号 , 需要我们加 1,星期日对应的编号是1,星期一对应的编号是2
set(Calendar.YEAR/MONTH/DAY_OF_MONTH , 年月日) 单独设置某个日期字段的信息
set(年,月,日) 直接设置多个日期字段的信息
compareTo(Calendar c) 比较两个时间值对象,拿前面的减去后面的
add(年/月/日, int amount) 将指定的日历字段增加或减去

1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)

import java.util.Calendar;
public class Main {
	public static void main(String[] args) {
		// Calendar是一个抽象类并且构造器是私有的 , 无法直接创建对象
	    Calendar calendar =Calendar.getInstance();
	    for(int year=1999;year<10000;year+=100) {
            //月是按0开始编号,11表示12月
	    	calendar.set(year,11,31);
            //输入一个日期可以得到其对应星期几, 星期日对应的编号是1
	    	if(calendar.get(Calendar.DAY_OF_WEEK)==1) {
	    		System.out.println(year);
	    		break;
	    	}
	    }
	}
}

java.time下的日期类

LocalDateTime常用方法

使用 now() 方法都可以获取 LocalDate(含有年月日) , LocalTime(含有时分秒) , LocalDateTime(含有年月日时分秒)的时间对象

LocalDateTime类一定也重写了toString 方法输出的不是一个对象的内存地址 , 日期默认的输出格式2021-03-04T18:03:12.082(一般需要日期格式化)

方法名 功能
static LocalDateTime now() 返回当前日期的时间对象(含有年月日时分秒)
getYear() 获取日期对象中的年份
getMonth() 获取日期对象中的月份(月份的英文)
getMonthValue() 获取日期对象中的月份(月份的数字)
getDayOfMonth() 获取日期对象中的天
getHour() 获取日期对象中的时
getMinute() 获取日期对象中的分
getSecond() 获取日期对象中的秒
LocalDateTime plusDays(int) 在当前时间基础上加多少天(年月日时分秒同理)
LocalDateTime minusMinutes(int) 对当前时间的基础上减多少分钟(年月日时分秒同理)
// 返回当前日期的时间对象(含有年月日时分秒)
LocalDateTime ldt = LocalDateTime.now(); 
// 返回当前日期的时间对象(含有年月日)
LocalDate now = LocalDate.now(); 
// 返回当前日期的时间对象(含有时分秒)               
LocalTime now2 = LocalTime.now();  
System.out.println(ldt);// 2021-03-04T8:03:12.082
// 获取日期对象的某个字段
System.out.println("年=" + ldt.getYear());
System.out.println("月=" + ldt.getMonth());
System.out.println("月=" + ldt.getMonthValue());
System.out.println("日=" + ldt.getDayOfMonth());
System.out.println("时=" + ldt.getHour());
System.out.println("分=" + ldt.getMinute());
System.out.println("秒=" + ldt.getSecond());            
// 看看90天后的时间
LocalDateTime localDateTime = ldt.plusDays(90);
System.out.println("90天后=" + localDateTime);
// 看看3456分钟前的时间
LocalDateTime localDateTime2 = ldt.minusMinutes(3456);
System.out.println("3456分钟前=" + localDateTime2);

DateTimeFormatter日期格式化

方法名 功能
static DateTimeFormatter ofPattern(String str) 创建一个指定日期转换格式的对象 , 除y M d H m s S这些字符不能随便写之外,剩下的符号格式可随意组织
String format( LocalDateTime ) 将日期对象按照指定的格式进行转换 , 返回一个字符串

将日期对象转换成指定格式的日期字符串String(格式化三要素日类型期对象 , 格式化对象 , 调用format方法对日期进行格式化)

// 返回当前日期的时间对象(含有年月日时分秒)
LocalDateTime ldt = LocalDateTime.now(); 
// 创建 DateTimeFormatter 对象对日期进行格式化
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String format = dateTimeFormatter.format(ldt);
System.out.println("格式化的日期=" + format);

java.time.Instant 时间戳

Date和Instant的相互转换

方法名 功能
static Instant now() 获取当前时间戳对应的时间对象 (UTC时区)
static Date from(Instant) 把 Instant 转成 Date
Instant Instant() 把 date 转成 Instant 对象
public static void main(String[] args) {
    // 获取表示当前时间戳对应的时间对象
    Instant now = Instant.now();
    System.out.println(now);
    // Instant转成Date
    Date date = Date.from(now);
    // Date转成Instant 对象
    Instant instant = date.toInstant();
}

你可能感兴趣的:(JavaSe,java,数据结构)