首页 > 编程语言 > 详细

java日期和时间

时间:2021-02-28 15:14:49      阅读:15      评论:0      收藏:0      [点我收藏+]

Java常用类:日期和时间

时间戳

Long timestamp = System.currentTimeMillis();

日期

  • java.util.Data类

    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    //创建时间对象
    Date date = new Date();
    System.out.println(date);//日期对象:Sun Feb 21 11:14:19 CST 2021
    
    //获取时间戳
    System.out.println(date.getTime());//Long类型
    
    //格式化输出时间
    System.out.println(date.toString());//字符串:Sun Feb 21 11:14:19 CST 2021
    
    
  • java.sql.Date类

    对应数据库的日期类型的变量

    //创建java.sql.Date对象
    java.sql.Date date1 = new java.sql.Date(1613879447151L);
    System.out.println(date1);//2021-02-21
    
    //java.util.Data转java.sql.Date
    Date date = new Date();
    java.sql.Date date1 = new java.sql.Date(date.getTime());
    
  • SimpleDateFormat类

    //用 SimpleDateFormat类,日期转字符串
    SimpleDateFormat s = new SimpleDateFormat("yy-MM-dd HH:mm:ss sss");
    System.out.println(s.format(date));//21-02-21 11:20:44 044
    //字符串转日期
    String str = "21-02-21 11:20:44";
    SimpleDateFormat s = new SimpleDateFormat("yy-MM-dd HH:mm:ss");//格式必须与字符串相对应
            try {
                Date d = s.parse(str);//需要处理该方法抛出的异常,否则会报错
                System.out.println(d);//日期对象:Sun Feb 21 11:14:19 CST 2021
            }catch (java.text.ParseException e){
                e.printStackTrace();
            }
    
  • Calendar类

    import java.util.Calendar;
    //Calendar是抽象类,无法通过实例化得到对象
    //方式一:创建子类(GregorianCalendar)的对象
    //方式二:通过getInstance()方法获取
    Calendar cal =  Calendar.getInstance();//Calendar对象的属性是可变的
    
    //获取值,get
    int year = cal.get(Calendar.YEAR);//特别注意:月份MONTH从0开始;DAY_OF_WEEK第一天是星期天(1)
    System.out.println(year);//2021
    
    //设置值,set
    cal.set(Calendar.YEAR,2020);
    
    //计算add
    cal.add(Calendar.YEAR,1)
        
    //两个Calendar对象比较(时间戳大小)
    int i = cal1.compareTo(cal2);
    System.out.println(i);//cal1等于cal2时,返回0;小于,返回-1;大于,返回1
    
    //日历类-->Date对象
    cal.getTime();
    
    //Date对象-->日历类
    Date date = new Date();
    cal.setTime(date);
    

JDK1.8 新的日期时间API出现

背景

JDK1.0时包含的java.util.Date的大多数方法已被弃用,而JDK1.1时引入的Calendar类也未改善多少,它们面临如下问题:

1.可变性:像日期和时间的类应该是不可变的

2.偏移量:Date中年份时从1900开始,月份是从0开始,容易误解

3.Calendar无法格式化

4.线程不安全,且无法处理闰秒

java8引入的时间API

jkd8 api文档
技术分享图片

//获取当前日期、时间
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime dateTime = LocalDateTime.now();//LocalDateTime使用频率比LocalDate、LocalTime高

//获取指定日期of():年月日、时分秒,无偏移
LocalDateTime.of(2021,02,22,23,05,01);

//getXXX()获取相关属性,以LocalDateTime类为例
LocalDateTime dateTime = LocalDateTime.now();
System.out.println(dateTime);//2021-02-22T23:15:53.057
System.out.println(dateTime.getDayOfYear());//53
System.out.println(dateTime.getDayOfMonth());//22
System.out.println(dateTime.getDayOfWeek());//MONDAY

//不可变性,通过withXXX()设置相关属性
LocalDateTime dateTime1 = dateTime.withYear(2020);
System.out.println("dateTime: "+dateTime);//dateTime: 2021-02-22T23:21:19.657
System.out.println("dateTime1: "+dateTime1);//dateTime1: 2020-02-22T23:21:19.657

//plusXXX(),进行加操作
LocalDateTime dateTime = LocalDateTime.now();
System.out.println(dateTime);//2021-02-22T23:27:49.096
System.out.println(dateTime.plusYears(1));//2022-02-22T23:27:49.096

//minusXXX(),进行减操作
LocalDateTime dateTime = LocalDateTime.now();
System.out.println(dateTime);//2021-02-22T23:27:49.096
System.out.println(dateTime.minusYears(1));//2020-02-22T23:27:49.096

Instance瞬时点对象

//now方法创建Instance对象
Instant instant = Instant.now();
System.out.println(instant);//2021-02-24T14:29:59.735Z
//通过毫秒数创建
Instant instant1 = Instant.ofEpochMilli(1614177554274L);
System.out.println(instant1);//2021-02-24T14:39:14.274Z

//创建不同时区offsetDateTime对象,添加时间偏移量
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime);//2021-02-24T22:35:43.848+08:00

//获取时间戳
long l = instant.toEpochMilli();
System.out.println(l);//1614177554274

DateTimeFormatter

//实例化
//方式一:预定义标准格式:
DateTimeFormatter isoLocalDateTime = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
DateTimeFormatter isoLocalDate = DateTimeFormatter.ISO_LOCAL_DATE;
DateTimeFormatter isoLocalTime = DateTimeFormatter.ISO_LOCAL_TIME;
//格式化
LocalDateTime localDateTime = LocalDateTime.now();
String format = isoLocalDateTime.format(localDateTime);
System.out.println(format);//2021-02-25T23:03:14.758
//解析
TemporalAccessor parse = isoLocalDateTime.parse(format);
System.out.println(parse);//{},ISO resolved to 2021-02-25T23:11:00.366

//方式二:本地化相关格式,如oflocaliedDateTime
//常量:FormateStyle.LONG\FormateStyle.MEDIUM\FormateStyle.SHORT
//适用于格式化LocalDateTime对象
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
String format1 = dateTimeFormatter.format(localDateTime);
System.out.println(format1);//2021-2-25 23:25:11

DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
String format2 = dateTimeFormatter1.format(localDateTime);
System.out.println(format2);//2021年2月25日 星期四

//方式三:自定义格式
DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime1 = LocalDateTime.of(2021, 02, 25, 23, 32, 59);
//格式化
String format3 = dateTimeFormatter2.format(localDateTime1);
System.out.println(format3);//2021-02-25 11:32:59

java日期和时间

原文:https://www.cnblogs.com/zuozs/p/14444333.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!