栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java日期类详解SimpleDateFormat、LocalDateTime、DateTimeFormatter等

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java日期类详解SimpleDateFormat、LocalDateTime、DateTimeFormatter等

字母含义
yyyy年
MM月
dd日
hh1-12小时制(1-12)
HH24小时制(0-23)
mm分
ss秒
S毫秒
E星期几
D一年中的第几天
F一月中的第几个星期(会把这个月总共过的天数除以7)
w一年中的第几个星期
W一月中的第几星期(会根据实际情况来算)
a上下午(am/pm)标识
k和HH差不多,表示一天24小时制(1-24)
K和hh差不多,表示一天12小时制(0-11)
z表示时区

比如:yyyy-MM-dd HH:mm:ss E --------->2022-09-15 07:17:13 星期三

第三代日期类
//LocalDateTime.now();  当前日期+时间
//LocalDate.now();	    当前日期
//LocalTime.now();	    当前时间
//DateTimeFormatter     用于格式化日期
LocalDateTime ldt = LocalDateTime.now(); //1
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");//2
String format = dateTimeFormatter.format(ldt);//3

System.out.println("年=" + ldt.getYear());//年=2022
System.out.println("月=" + ldt.getMonth());//月=JULY
System.out.println("月=" + ldt.getMonthValue());//月=7
System.out.println("日=" + ldt.getDayOfMonth());//日=20
System.out.println("时=" + ldt.getHour());//时=14
System.out.println("分=" + ldt.getMinute());//分=35
System.out.println("秒=" + ldt.getSecond());//秒=51

//提供plus 和minus方法可以对当前日期时间进行加/减
LocalDateTime localDateTime = ldt.plusDays(10);//10天后的日期时间
System.out.println("10天后的日期时间=" + dateTimeFormatter.format(localDateTime));
LocalDateTime localDateTime2 = ldt.minusMinutes(600);//600 分钟前的日期时间
System.out.println("600 分钟前的日期时间=" + dateTimeFormatter.format(localDateTime2));

  • Instant 时间戳(类似于Date,提供了一系列和Date类型转换的方式)

    • lnstant—>Date:

      • Date date = Date.from(instant);
    • Date->Instant:

      • Instant instant = date.toInstant();
//1.通过 静态方法 now() 获取当前时间戳的对象
    Instant now = Instant.now();
//2. 通过 from 方法 可以把 Instant 转成 Date
    Date date = Date.from(now);
//3. 通过 date 的 toInstant() 方法 可以把 date 转成 Instant 对象
    Instant instant = date.toInstant();

提示:第三代日期类很多方法,需要时查API即可
1. LocalDateTime类
2. MonthDay类:检查重复事件是否是闰年
3. 增加日期的某个部分
4. 使用plus方法测试增加时间的某个部分
5. 使用minus方法测试查看一年前和一年后的日期等等…

第一代日期类
//这里的 Date 类是在 java.util 包下
//默认输出的日期格式是国外的方式, 因此通常需要对格式进行转换
//1.获取当前系统时间
Date nowTime = new Date();
//2.创建 SimpleDateFormat 对象,将日期指定格式输出
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");
String format = sdf.format(nowTime); 

// String -> Date(使用的sdf日期格式需要和“你给的String日期格式”一样,否则会抛出转换异常)
Date parseDate = sdf.parse("你给的 String");
// Date -> String
String newStringDate = sdf.format(parseDate); 

第二代日期类,主要是Calendar类(日历)
//1. Calendar 是抽象类, 构造器是 private 的;
//2. 可以通过 getInstance() 创建实例对象
//3. 提供大量的方法和字段供程序员使用
//4. 如果我们需要按照 24 小时进制来获取时间, Calendar.HOUR ==改成=> Calendar.HOUR_OF_DAY

Calendar c = Calendar.getInstance(); //1.创建日历类对象
System.out.println("年:" + c.get(Calendar.YEAR));//2.获取日历对象的某个日历字段
System.out.println("月:" + (c.get(Calendar.MONTH) + 1));// Why月份 + 1, 因为 Calendar 在返回月份时,是按照 0 开始编号的
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));

第一代、二代日期类的不足分析:

  1. JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被弃用了。

  2. Calendar存在问题是:1)可变性:像日期和时间这样的类应该是不可变的。2)偏移性:Date中的年份是从1900开始的,而月份都从0开始。3)格式化:格式化只对Date有用,Calendar则不行。4)此外,一代、二代日期类线程不安全;不能处理闰秒等(每隔2天,多出1s)。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1020006.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号