您当前的位置: 首页 >  Java

ITKEY_

暂无认证

  • 0浏览

    0关注

    732博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java温故而知新-日期时间

ITKEY_ 发布时间:2021-01-21 21:42:46 ,浏览量:0

目录
  • Date类
    • Date实例化与日期比较
  • Calendar
    • 范例:获取当前日期时间
    • 范例:日期计算
    • 范例:找到8月的最后一天
  • SimpleDateFormat
    • 范例:日期格式化yyyy-MM-dd HH:mm:ss.SSS
    • 范例:字符串转日期时间(String ➡️ Date)
    • 数据类型转换表
  • LocalDate
    • 范例:获取当年的日期时间
    • 范例:通过LocalDate获取详细的日期数据
    • 范例:判断是否是闰年
    • 范例:日期的推算
  • 多线程中日期格式化
    • 方式一:性能差,容易产生垃圾
    • 方式二:多线程会报错
    • 方式三:DateTimeFormatter(多线程下推荐)

Date类
System.out.println(new Date());

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

Date实例化与日期比较
import java.util.Date;

public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        long datetime = System.currentTimeMillis() - 10000 ;    // 得到了一个long数据类型
        Date dateA = new Date(datetime) ; // 日期时间数值要小
        Date dateB = new Date() ;   // 日期时间数值要大
        System.out.println(dateA); // long转为Date类型
        System.out.println(dateB);
        System.out.println("【两个日期之间所差的毫秒数】" + (dateB.getTime() - dateA.getTime()));
        System.out.println("【先后关系】AFTER:" + (dateA.after(dateB)));
        System.out.println("【先后关系】BEFORE:" + (dateA.before(dateB)));
    }
}
Calendar

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

范例:获取当前日期时间
package com.yootk.demo;

import java.util.Calendar;

public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        Calendar calendar = Calendar.getInstance(); // 获取对象实例
        System.out.println(String.format("当前的日期时间格式:%s-%s-%s %s:%s:%s",
                calendar.get(Calendar.YEAR),
                calendar.get(Calendar.MONTH) + 1,
                calendar.get(Calendar.DAY_OF_MONTH),
                calendar.get(Calendar.HOUR_OF_DAY),
                calendar.get(Calendar.MINUTE),
                calendar.get(Calendar.SECOND)));
    }
}

在这里插入图片描述

范例:日期计算
import java.util.Calendar;

public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        Calendar calendar = Calendar.getInstance(); // 获取对象实例
        calendar.add(Calendar.YEAR, 30); // 30年之后
        calendar.add(Calendar.MONTH, 6); // 计算半年之后的日期
        System.out.println(String.format("当前的日期时间格式:%s-%s-%s %s:%s:%s",
                calendar.get(Calendar.YEAR),
                calendar.get(Calendar.MONTH) + 1,
                calendar.get(Calendar.DAY_OF_MONTH),
                calendar.get(Calendar.HOUR_OF_DAY),
                calendar.get(Calendar.MINUTE),
                calendar.get(Calendar.SECOND)));
    }
}

在这里插入图片描述

范例:找到8月的最后一天
import java.util.Calendar;

public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        Calendar calendar = Calendar.getInstance(); // 获取对象实例
        calendar.set(calendar.get(Calendar.YEAR), 8, 1); // 通过9月计算8月最后一天
        calendar.add(Calendar.DATE, -1); // 9月的第一天减1
        System.out.println(String.format("当前的日期时间格式:%s-%s-%s %s:%s:%s",
                calendar.get(Calendar.YEAR),
                calendar.get(Calendar.MONTH) + 1,
                calendar.get(Calendar.DAY_OF_MONTH),
                calendar.get(Calendar.HOUR_OF_DAY),
                calendar.get(Calendar.MINUTE),
                calendar.get(Calendar.SECOND)));
    }
}

在这里插入图片描述

SimpleDateFormat

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

范例:日期格式化yyyy-MM-dd HH:mm:ss.SSS
import java.text.SimpleDateFormat;
import java.util.Date;

public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        Date date = new Date() ;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS") ; // 实例化转换类对象
        String str = sdf.format(date) ; // 将日期时间转为字符串
        System.out.println(str);
    }
}
范例:字符串转日期时间(String ➡️ Date)
package com.yootk.demo;

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

public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        String str = "2020-02-16 15:54:36.873" ; // 所给出的日期时间字符串的组成要求符合于匹配结构
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS") ; // 实例化转换类对象
        Date date = sdf.parse(str) ; // 将字符串转为日期时间
        System.out.println(date);
    }
}
数据类型转换表

在这里插入图片描述

LocalDate

在这里插入图片描述

范例:获取当年的日期时间
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        LocalDate localDate = LocalDate.now() ; // 获得当前的日期
        LocalTime localTime = LocalTime.now() ; // 获得当前的时间
        LocalDateTime localDateTime = LocalDateTime.now() ; // 获得当前的日期时间
        System.out.println("【LocalDate实例化对象输出】" + localDate);
        System.out.println("【LocalTime实例化对象输出】" + localTime);
        System.out.println("【LocalDateTime实例化对象输出】" + localDateTime);
    }
}
范例:通过LocalDate获取详细的日期数据
import java.time.LocalDate;
import java.time.temporal.ChronoField;

public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        LocalDate today = LocalDate.now(); // 获得当前的日期
        System.out.println(String.format("【当前日期】%s-%s-%s", today.getYear(), today.getMonthValue(), today.getDayOfMonth()));
        System.out.println("【获取一周时间数】" + today.getDayOfWeek().getValue());
        System.out.println("【今天所处一月的周数】" + today.get(ChronoField.ALIGNED_WEEK_OF_MONTH));
        System.out.println("【今天所处一年的周数】" + today.get(ChronoField.ALIGNED_WEEK_OF_YEAR));
        System.out.println("【今天所处一年的第几天】" + today.getDayOfYear());
    }
}
范例:判断是否是闰年
import java.time.LocalDate;

public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        LocalDate localDate = LocalDate.parse("1988-09-15") ; // 操作特定日期
        System.out.println("【闰年判断】" + localDate.isLeapYear());
        System.out.println("【所处的一周时间数】" + localDate.getDayOfWeek());
    }
}
范例:日期的推算

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;

public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        LocalDate localDate = LocalDate.parse("1988-09-15"); // 操作特定日期
        System.out.println("【所在月的第一天】" + localDate.with(TemporalAdjusters.firstDayOfMonth()));
        System.out.println("【所在月的第二天】" + localDate.withDayOfMonth(2));
        System.out.println("【所在月的最后一天】" + localDate.with(TemporalAdjusters.lastDayOfMonth()));
        System.out.println("【300年后的日期】" + localDate.plusYears(300));
        System.out.println("【300月后的日期】" + localDate.plusMonths(300));
        System.out.println("【日期所处月的第一个周一】" + localDate.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)));
        System.out.println("【日期所处年的第一个周一】" + LocalDate.parse("1988-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)));
    }
}
多线程中日期格式化 方式一:性能差,容易产生垃圾
package com.yootk.demo;

import java.text.ParseException;
import java.text.SimpleDateFormat;

public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        for (int x = 0; x  {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                try {   // 单一线程下的实现的字符串转日期处理
                    System.out.println("【" + Thread.currentThread().getName() + "】" + sdf.parse("1998-02-17 21:15:32"));
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }, "SDF转换线程 - " + x).start();
        }
    }
}

不会出现任何错误,但是SimpleDateFormat sdf 重复了,会导致垃圾的产生。

方式二:多线程会报错
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        // 日期时间的格式化类对象,定义SimpleDateFormat类中的匹配日期时间字符串
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") ;
        ZoneId zoneId = ZoneId.systemDefault() ; // 获得当前的时区ID
        for (int x = 0; x  {
                LocalDateTime localDateTime = LocalDateTime.parse("1998-02-17 21:15:32", formatter) ;
                Instant instant = localDateTime.atZone(zoneId).toInstant();// 获得一个当前时区的实例
                Date date = Date.from(instant) ; // 字符串转为日期
                System.out.println("【" + Thread.currentThread().getName() + "】" + date);
            }, "SDF转换线程 - " + x).start();
        }
    }
}

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

方式三:DateTimeFormatter(多线程下推荐)

日期时间:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        // 日期时间的格式化类对象,定义SimpleDateFormat类中的匹配日期时间字符串
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") ;
        ZoneId zoneId = ZoneId.systemDefault() ; // 获得当前的时区ID
        for (int x = 0; x  {
                LocalDateTime localDateTime = LocalDateTime.parse("1998-02-17 21:15:32", formatter) ;
                Instant instant = localDateTime.atZone(zoneId).toInstant();// 获得一个当前时区的实例
                Date date = Date.from(instant) ; // 字符串转为日期
                System.out.println("【" + Thread.currentThread().getName() + "】" + date);
            }, "SDF转换线程 - " + x).start();
        }
    }
}

日期:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class YootkDemo {    // 李兴华编程训练营:yootk.ke.qq.com
    public static void main(String[] args) throws Exception {
        // 日期时间的格式化类对象,定义SimpleDateFormat类中的匹配日期时间字符串
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") ;
        ZoneId zoneId = ZoneId.systemDefault() ; // 获得当前的时区ID
        for (int x = 0; x  {
                LocalDate localDate = LocalDate.parse("1998-02-17", formatter) ;
                Instant instant = localDate.atStartOfDay().atZone(zoneId).toInstant() ; // 获取当前时区实例
                Date date = Date.from(instant) ; // 字符串转为日期
                System.out.println("【" + Thread.currentThread().getName() + "】" + date);
            }, "SDF转换线程 - " + x).start();
        }
    }
}

在这里插入图片描述

关注
打赏
1665243900
查看更多评论
立即登录/注册

微信扫码登录

0.0417s