当前位置: 首页 > news >正文

Java基础关键_013_日期处理

目  录

一、传统 API

1.System.currentTimeMillis()

(1)说明

(2)实例

2.构造方法

(1)说明

(2)无参构造

(3)有参构造

3.日期格式化

(1)说明

(2)实例

4.日历

(1)get() 与 getTime()

(2)set() 与 setTime()

二、全新 API

1.LocalDate、LocalTime、LocalDateTime

2.toEpochMilli 新时间戳

3.Duration 时间差

4.Period 日期差

5.TemporalAdjusters 时间矫正器

6.DateTimeFormatter 日期格式化


一、传统 API

1.System.currentTimeMillis()

(1)说明

  1. 获取自 1970年1月1日0时0分0秒到系统当前时间的总毫秒数;
  2. 1s (秒) = 1000ms(毫秒);
  3. 1ms(毫秒) = 1000μs(微秒);
  4. 1μs(微秒) = 1000ns(纳秒);
  5. 1ns (纳秒)= 1000ps(皮秒)。

(2)实例

public class DateTest {
    public static void main(String[] args) {
        long time = System.currentTimeMillis();
        System.out.println(time);   // 1740723807436
    }
}

2.构造方法

(1)说明

        此处是 java.util.Date ,而 java.sql.Date 是 java.util.Date 的子类。


(2)无参构造

public class DateTest {
    public static void main(String[] args) {
        // 获取当前时间
        Date d1 = new Date();
        System.out.println(d1);   // Fri Feb 28 13:56:29 CST 2025
    }
}

(3)有参构造

public class DateTest {
    public static void main(String[] args) {
        // 获取当前时间
        Date d1 = new Date(System.currentTimeMillis());
        System.out.println(d1);   // Fri Feb 28 14:02:24 CST 2025

        // 获取指定时间
        Date d2 = new Date(3000);
        System.out.println(d2); // Thu Jan 01 08:00:03 CST 1970
    }
}

3.日期格式化

(1)说明

  1. 需要使用 java.text.SimpleDateFormat 类,其父类是 DateFormat ;
  2. 日期和时间格式由日期和时间模式字符串指定,模式字母如下表所示。

模式字母

符号日期或时间组件说明例子
G年号文本AD
y199696
Y周 年200909
M一年中的月份(上下文相关)JulyJul07
L一年中的月份 (独立形式)JulyJul07
w一年中的周27
W每月的周2
D一年中的天189
d当月的日期10
F当月中的星期几2
E星期名称文本TuesdayTue
u

星期数

(1 = 星期一,...,7 = 星期日)

1
a上午/下午标记文本PM
H一天中的小时 (0-23)0
k一天中的小时 (1-24)24
K上午 / 下午 (0-11) 小时数0
h上午 / 下午 (1-12)12
m分钟(小时)30
s秒(分钟)55
S毫秒978
z时区通用时区Pacific Standard TimePSTGMT-08:00
Z时区RFC 822 时区-0800
X时区ISO 8601 时区-08-0800-08:00

(2)实例

public class DateTest {
    public static void main(String[] args) throws ParseException {
        Date d1 = new Date();
        System.out.println(d1);   // Fri Feb 28 14:29:31 CST 2025

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        String format = sdf.format(d1);
        System.out.println(format); // 2025年02月28日 14:29:31


        String time = "2000年06月16日 08:08:08";
        Date d2 = sdf.parse(time);
        System.out.println(d2); // Fri Jun 16 08:08:08 CST 2000
    }
}

4.日历

(1)get() 与 getTime()

public class DateTest {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance(); // 获取当前时间的日历对象,调用一个静态方法

        System.out.println(calendar.getTime()); // 获取当前时间

        System.out.println(calendar.get(Calendar.YEAR));    // 获取年份

        System.out.println(calendar.get(Calendar.MONTH) + 1);   // 获取月份,从0开始,需要加1

        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));    // 获取本月的第几天

        System.out.println(calendar.get(Calendar.DAY_OF_WEEK)); // 获取星期,从1开始,1表示星期天

        System.out.println(calendar.get(Calendar.DAY_OF_YEAR)); // 获取本年的第几天

        System.out.println(calendar.get(Calendar.HOUR));    // 获取小时,12小时制

        System.out.println(calendar.get(Calendar.HOUR_OF_DAY)); // 获取小时,24小时制

        System.out.println(calendar.get(Calendar.MINUTE));  // 获取分钟

        System.out.println(calendar.get(Calendar.SECOND));  // 获取秒

        System.out.println(calendar.get(Calendar.MILLISECOND)); // 获取毫秒
    }
}

(2)set() 与 setTime()

public class DateTest {
    public static void main(String[] args) throws ParseException {
        /**
         * set()
         */
        Calendar calendar = Calendar.getInstance(); // 获取当前时间的日历对象
        calendar.set(Calendar.YEAR, 1945);
        calendar.set(Calendar.MONTH, Calendar.SEPTEMBER);
        calendar.set(Calendar.DAY_OF_MONTH, 15);

        System.out.println("日本无条件投降:" + calendar.get(Calendar.YEAR) + "年" + calendar.get(Calendar.MONTH) + "月" + calendar.get(Calendar.DAY_OF_MONTH) + "日"); // 日本无条件投降:1945年8月15日

        calendar.set(2020, Calendar.JANUARY, 1, 8, 8, 8);
        System.out.println(calendar.getTime()); // Wed Jan 01 08:08:08 CST 2020


        /**
         * setTime()
         */
        String time = "2022-02-24";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse(time);
        calendar.setTime(date);
        System.out.println(calendar.getTime()); // Thu Feb 24 00:00:00 CST 2022
    }
}

二、全新 API

        由于传统 API 存在线程安全问题,jdk 8 提供了一套全新 API ,在 java.time 包下。

1.LocalDate、LocalTime、LocalDateTime

public class DateTest {
    public static void main(String[] args) throws ParseException {
        System.out.println("【获取系统当前日期时间】");
        System.out.println(LocalDate.now());    // 2025-02-28
        System.out.println(LocalTime.now());    // 17:19:21.671997600
        System.out.println(LocalDateTime.now());    // 2025-02-28T17:19:21 .671997600

        System.out.println("==================================");
        System.out.println("【获取指定日期时间】");
        System.out.println(LocalDate.of(2000, 1, 1));
        System.out.println(LocalTime.of(8, 16, 26, 36));

        System.out.println("==================================");
        System.out.println("【加日期时间】");
        System.out.println(LocalDateTime.now().plusYears(3).plusMonths(3).plusDays(1));

        System.out.println("==================================");
        System.out.println("【减日期时间】");
        System.out.println(LocalDateTime.now().minusYears(3).minusMonths(3).minusDays(1));
    }
}

2.toEpochMilli 新时间戳

public class DateTest {
    public static void main(String[] args) throws ParseException {
        // UTC 时间戳
        Instant now = Instant.now();
        System.out.println(now);    // 2025-02-28T10:38:03.122192700Z
        System.out.println("时间戳:" + now.toEpochMilli());    // 时间戳:1740739083122
    }
}

3.Duration 时间差

public class DateTest {
    public static void main(String[] args) throws ParseException {
        LocalDateTime ldt1 = LocalDateTime.of(2019, 12, 12, 0, 0, 0);
        LocalDateTime ldt2 = LocalDateTime.now();
        Duration between = Duration.between(ldt1, ldt2);
        System.out.println("距离新冠肺炎爆发已经:" + between.toDays() + "天"); // 距离新冠肺炎爆发已经:1905天
        System.out.println("距离新冠肺炎爆发已经:" + between.toHours() + "小时");   // 距离新冠肺炎爆发已经:45738小时
        System.out.println("距离新冠肺炎爆发已经:" + between.toMinutes() + "分钟"); // 距离新冠肺炎爆发已经:2744326分钟
        System.out.println("距离新冠肺炎爆发已经:" + between.toMillis() + "毫秒");  // 距离新冠肺炎爆发已经:164659582897毫秒
    }
}

4.Period 日期差

public class DateTest {
    public static void main(String[] args) throws ParseException {
        LocalDate ld1 = LocalDate.of(2019, 12, 12);
        LocalDate ld2 = LocalDate.now();
        Period between = Period.between(ld1, ld2);
        System.out.println("距离新冠病毒爆发已经过去:" + between.getYears() + "年" + between.getMonths() + "月" + between.getDays() + "天");   // 距离新冠病毒爆发已经过去:5年2月16天
    }
}

5.TemporalAdjusters 时间矫正器

public class DateTest {
    public static void main(String[] args) throws ParseException {
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ldt);    // 2025-02-28T20:25:50.585827

        System.out.println(ldt.with(TemporalAdjusters.firstDayOfYear()));   // 2025-01-01T20:25:50.585827
        System.out.println(ldt.with(TemporalAdjusters.lastDayOfYear()));    // 2025-12-31T20:25:50.585827

        System.out.println(ldt.with(TemporalAdjusters.firstDayOfMonth()));  // 2025-02-01T20:25:50.585827
        System.out.println(ldt.with(TemporalAdjusters.lastDayOfMonth()));   // 2025-02-28T20:25:50.585827

        System.out.println(ldt.with(TemporalAdjusters.next(DayOfWeek.MONDAY))); // 2025-03-03T20:25:50.585827
    }
}

6.DateTimeFormatter 日期格式化

public class DateTest {
    public static void main(String[] args) throws ParseException {
        LocalDateTime ldt = LocalDateTime.now();
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
        System.out.println(dtf.format(ldt));    // 2025年02月28日 20:33:55

        LocalDateTime ldt1 = LocalDateTime.parse("2020年01月01日 08:08:08", dtf);
        System.out.println(ldt1);   // 2020-01-01T08:08:08
    }
}

相关文章:

  • STM32之影子寄存器
  • Rust学习总结之-match
  • 绕过 RAG 实时检索瓶颈,缓存增强生成(CAG)如何助力性能突破?
  • python-leetcode-下一个排列
  • local_costMap 和global costMap要改的参数
  • Python实现视频播放器
  • 数据结构:二叉树的链式结构及相关算法详解
  • 通过百度构建一个智能体
  • 【Django自学】Django入门:如何使用django开发一个web项目(非常详细)
  • 使用tkinter有UI方式来拷贝Excel文件
  • 1629 按键持续时间最长的键
  • leetcode:2164. 对奇偶下标分别排序(python3解法)
  • 使用PDFMiner.six解析PDF数据
  • python-leetcode-删除并获得点数
  • AI Angent=智能体?
  • 统计有序矩阵中的负数
  • 新建菜单项的创建之CmpGetValueListFromCache函数分析
  • nuxt常用组件库html-validator应用解析
  • 使用 Selenium 和 Requests 自动化获取动态 Referer 和 Sign 的完整指南
  • 商淘云B2B2C系统 一款支持商家也能分销的多用户商城
  • 手机wap网站建设/百度推广手机客户端
  • 怎么免费做文学网站/百度查重免费入口
  • 网站建设 文库/中公教育培训机构官网
  • 网站开发应该怎么做/百度搜索资源平台提交
  • 微信菜单栏那些网站怎么做/百度查找相似图片
  • 攻把受做哭了gv网站/房地产销售怎么找客户