jdk8新特性-日期时间

news2024/11/15 23:37:05

1、介绍

日期时间类在Java开发中是必不可少的,前后端如何传递时间参数、数据库的时间在Java中对应什么类型、Java中时间转换的各种方式有哪些?

2、Date类

Date类是JDK1.0时期推出来的第一代时间类,位于java.util包下,是最常用的方式是对获取当前时间,使用SimpleDateFormat对时间进行格式化。

Date now = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String nowStr = simpleDateFormat.format(now);

Date对象中也有一系列API用于获取年份、月份、星期、时、分、秒等信息,但是大多数都已不推荐使用:

在这里插入图片描述

在使用SimpleDateFormat格式化Date类时还需要注意线程安全问题,因为SimpleDateFormat是线程不安全的,一般不要定义为static类型:

public class Demo {

    final static SimpleDateFormat YYY_MM_DD_HH_MM_SS = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();

        for (int i = 0; i < 10; i++) {
            new Thread(() -> {
                Date date = null;
                try {
                    date = YYY_MM_DD_HH_MM_SS.parse("2023-01-29 09:09:09");
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                System.out.println(date);
            }).start();
        }
    }
}

在这里插入图片描述

3、Calendar类

Calendar类是JDK1.1时期推出时间类,位于java.util包下,用来替换Date中获取年份、月份、星期、时、分、秒等时间元素的API,使用相对Date类来说相对简单:

//基于当前时间获得Calendar实例
Calendar calendar = Calendar.getInstance();

System.out.println("年:" + calendar.get(Calendar.YEAR));
// 初始月份是从0开始
System.out.println("月:" + (calendar.get(Calendar.MONTH)+1));
System.out.println("日:" + calendar.get(Calendar.DATE));
System.out.println("小时(24时制):" + calendar.get(Calendar.HOUR_OF_DAY));
System.out.println("小时(12时制):" + calendar.get(Calendar.HOUR));
System.out.println("分钟:" + calendar.get(Calendar.MINUTE));
System.out.println("秒:" + calendar.get(Calendar.SECOND));
System.out.println("毫秒:" + calendar.get(Calendar.MILLISECOND));
System.out.println("今年的第几周:" + calendar.get(Calendar.WEEK_OF_YEAR));
System.out.println("这个月的第几周:" + calendar.get(Calendar.WEEK_OF_MONTH));
System.out.println("年内第几天:" + calendar.get(Calendar.DAY_OF_YEAR));
System.out.println("月内第几天:" + calendar.get(Calendar.DAY_OF_MONTH));
System.out.println("周内第几天:" + calendar.get(Calendar.DAY_OF_WEEK));

/**
 * 
 * final Date getTime(); //获得Calendar实例对应的Date对象
 * final void setTime(Date date); //使用Date实例初始化Calendar对象
 *
 */

Calendar类的出现并没有替换掉Date类,它更像是对Date类的增强。可能Date类并不好用,所以出现了很多第三方的时间库,比如joda time

4、LocalDateTime类

JDK1.8对日期时间类做了一次大的更新,joda time库的作者也参与到了其中。这一版的时间类功能强大全面,使用简单,且解决了之前的线程安全性问题,推荐使用。

JDK1.8在java.time包下新增了大量的时间处理类,新增了许多常用的API操作,如日期时间的比较、加减、格式化等等,Instant、LocalDate、LocalTime、LocalDateTime是几个常用的时间类。

Instant:提供了一个高精度的时间戳。

//基于当前时间获得Instant实例
Instant now = Instant.now();

//毫秒时间戳,和System.currentTimeMillis()效果一致
long epochMilli = now.toEpochMilli();

//秒级时间戳
long epochSecond = now.getEpochSecond();

LocalDate:是一个不可变的日期对象,表示日期,不包含时分秒。

//基于当前时间获得LocalDate实例
LocalDate now = LocalDate.now();

System.out.println(now);//2023-01-29
System.out.println(now.getYear());//获取年 2023
System.out.println(now.getMonth().getValue());//获取月 1
System.out.println(now.getDayOfMonth());//获取当前月第几天 29

/**
 * LocalDate实例其它常用方法:
 *
 *      public LocalDate plusDays(long daysToAdd):添加指定天数。
 *      public LocalDate plusMonths(long monthsToAdd):添加指定月数。
 *      public LocalDate plusWeeks(long weeksToAdd):添加指定周数。
 *      public LocalDate plusYears(long yearsToAdd):添加指定年数。
 *      public LocalDate minusDays(long daysToSubtract):减少指定天数。
 */

LocalTime:是一个不可变的时间对象,表示时间(时分秒),不包年月日。

//基于当前时间获得LocalTime实例
LocalTime now = LocalTime.now();

System.out.println(now);//14:51:47.264

System.out.println(now.getHour());//获取时 14
System.out.println(now.getMinute());//获取分   51
System.out.println(now.getSecond());//获取秒   47

LocalDateTime:是一个不可变的日期时间对象,表示日期时间,包含年月日时分秒(使用较多)。

//基于当前时间获得LocalDateTime实例
LocalDateTime now = LocalDateTime.now();

System.out.println(now);//2023-01-29T15:06:44.353


/**
 * 时间格式化使用新增的类
 *
 *      DateTimeFormatter:是一个线程安全的时间格式化类。
 */
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String nowStr = dateTimeFormatter.format(now);//2023-01-29 15:06:44

long milli = now.toInstant(ZoneOffset.of("+8")).toEpochMilli();//获取东8区(北京时间)毫秒级时间戳
long second = now.toEpochSecond(ZoneOffset.of("+8"));//获取东8区(北京时间)秒级时间戳

5、对应数据库

在数据库中,时间类型有date、datetime、time、timestamp,在Java中分别使用什么类型映射接收。

  • date类型使用LocalDate接收。
  • time类型使用LocalTime接收。
  • datetime类型使用LocalDateTime接收。
  • timestamp类型使用LocalDateTime接收。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/184933.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

unctf easy_serialize反序列化字符逃逸

&#xfeff;ctf题目平台&#xff1a;UNCTF - HACKING 4 FUN。web题难度适中 easy_serialize 题目源码&#xff1a; <?php include "function.php"; $action $_POST[action]; $name $_POST[name]; $pass $_POST[pass]; $email $_POST[email]; ​ function …

南京小米java面经(一面)

目录1.java支持多继承吗2.线程的生命周期3.线程和进程的区别4.单例模式有几种5.写一下双重锁的单例6.jvm有哪些区域7.jvm哪些区域是线程共享的&#xff0c;哪些是线程私有的8.gc中判断对象可回收的方式有哪些9.gc垃圾回收算法有哪些10.哪些对象可以作为gc root11.gc中的引用计数…

软件设计师教程(四)程序设计语言基础知识

软件设计师教程 软件设计师教程&#xff08;一&#xff09;计算机系统知识-计算机系统基础知识 软件设计师教程&#xff08;二&#xff09;计算机系统知识-计算机体系结构 软件设计师教程&#xff08;三&#xff09;计算机系统知识-计算机体系结构 程序设计语言知识软件设计师…

工资管理系统

一、系统简介 工资管理涉及企业管理的多个方面&#xff0c;如员工基本信息、员工在职离岗、员工考勤、员工加班等等。根据这些信息&#xff0c;在每个月的固定时间&#xff0c;生成全体员工的月工资&#xff0c;部门月工资以及全厂月工资。对于月工资&#xff0c;能够实现按照员…

机器学习【西瓜书/南瓜书】--- 第五章 神经网络

1.神经元模型 1.1 M-P神经元模型 输出函数&#xff1a; 其中θ为阈值&#xff0c; ω i为第i个神经元的连接权重&#xff0c; xi为来自第i个神经元的输入。 1.2 激活函数 阶跃函数&#xff1a; 理论上我们使用阶跃函数。将输入值映射为输出值为0/1&#xff0c;显然1为神经元…

Windows下编译安装OpenCASCADE

OpenCASCADE (以下简称OCC)是一套开源的几何建模系统&#xff0c;提供了曲面、实体等建模方式&#xff0c;已经广泛应用在CAD、CAE、CAM等软件开发。 OpenCASCADE官网已经提供OpenCASCADE的编译安装方法&#xff0c;本文结合实操过程&#xff0c;简述其过程。 零、环境 操作系…

Databend v0.9.0 版本发布

各位社区小伙伴们&#xff0c;历经数月开发&#xff0c;Databend 于 2023 年 1 月 13 日迎来了 v0.9.0 版本的正式发布&#xff01; 这次新版本是 Databend 迈向 1.0 版本的最后一个大版本&#xff0c;也是迄今为止我们对核心代码重构幅度最大的一个版本&#xff01;相较于 v0…

C++ string容器,cha*

目录 1.string基本概念 2.string构造函数,char* 3.string赋值操作 4.string字符串拼接,append 5.string查找和替换,find,replace 6.string字符串比较,compare 7.string字符存取[].at&#xff0c;取&#xff0c;修改单个字符&#xff0c;size返回字符串长度 8.string插入和…

数学建模学习笔记(13)分类模型

分类模型分类问题的基本概念逻辑斯蒂回归&#xff08;Logistic&#xff09;Fisher线性判别分析多分类问题的SPSS求解分类问题的基本概念 分类问题概述&#xff1a;对于给定的一个对象&#xff0c;根据其特征将其划分到多个已给定的类别中的一个。 二分类和多分类&#xff1a;…

题目:两数之和

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录描述描述 方式1:暴力遍历 public static int[] twoSum(int[] nums, int target) {int i 0;int j 1;int[] result new int[2];for(int m i;m<nums.length-1;m){…

13.3nm粒径水溶性Cds/CdTe-PAA-P4VP/BSA的制备方法

13.3nm粒径水溶性Cds/CdTe-PAA-P4VP/BSA的制备方法今天小编分享量子点偶联聚合物&#xff0c;一起看看吧&#xff1a;Cds/CdTe-PAA-P4VP/BSA的制备过程&#xff1a;称取86.5mgCdCl2于三口瓶中&#xff0c;加入295mL二次水&#xff08;考虑到在调pH值时会增加溶液的体积&#xf…

(14)工业界推荐系统-小红书推荐场景及内部实践【重排】

&#xff08;1&#xff09;工业界推荐系统-小红书推荐场景及内部实践【业务指标、链路、ItemCF】 &#xff08;2&#xff09;工业界推荐系统-小红书推荐场景及内部实践【UserCF、离线特征处理】 &#xff08;3&#xff09;工业界推荐系统-小红书推荐场景及内部实践【矩阵补充、…

目前音质最好的蓝牙耳机有哪些?2023公认音质最好的蓝牙耳机推荐

随着技术的进步&#xff0c;蓝牙耳机的功能也越来越多样&#xff0c;人们在选择蓝牙耳机时也更能够“精准”地搜索关键词&#xff0c;进行选择。不少人很注重蓝牙耳机的音质&#xff0c;最近看到不少人问&#xff0c;目前音质最好的蓝牙耳机有哪些&#xff1f;下面&#xff0c;…

如何录制视频课程?右下角带人脸的视频怎么录制

现如今网络十分发达&#xff0c;想学习知识也十分简单&#xff0c;只要在网上搜索你想要学习的内容&#xff0c;就会出现许多相关的视频课程。那您知道如何录制视频课程吗&#xff1f;在录制时如何录入人脸&#xff1f;其实一款专业的录屏软件就能轻松搞定。今天小编教大家使用…

分析一下spring循环依赖

1.为什么循环依赖是个问题 spring 中 Bean 的创建一定是经历创建对象和依赖注入两个步骤 假设对象 Bean_A 和 Bean_B 存在循环依赖&#xff0c;如下图 1.Bean_A 创建的时候需要 Bean_B&#xff0c;就会创建Bean_B 2.Bean_B创建的时候又需要Bean_A&#xff0c;又去创建Bean_A 3…

原创 140 多篇,是时候来篇总结了

光阴似剪&#xff0c;日月如梭。不知不觉&#xff0c;从 17 年广工毕业到现在&#xff0c;已经毕业 5 年多了。 从大四开始写博客&#xff0c;有原创 110 多篇, 也获得了 CSDN 博客专家称号和掘金优秀作者称号。 回想这五年来的程序员生涯&#xff0c;谈不上满意&#xff0c;也…

方块状量子点CdTe-Tf包裹转铁蛋白/球形5nmCdTe-NGAL的制备方法

方块状羧基/氨基化量子点CdTe-Tf包裹转铁蛋白/球形5nmCdTe-NGAL的制备方法今天小编分享CdTe-Tf包裹转铁蛋白&#xff0c;一起看看吧&#xff1a;CdTe-Tf包裹转铁蛋白的制备过程:在充满氦气的无水无氧的手套箱中&#xff0c;0.125 g (5.42510-4 mol) Cd(Ac)2加入到三口瓶中的10 …

原生微信小程序转化uniapp项目的神操作

前言 可能有些朋友只知道能将uniapp编译成微信小程序&#xff0c;但是没想到原生微信小程序也能编译成uniapp项目&#xff0c;这里推荐一款【miniprogram-to-uniapp】小程序转换工具插件 原理 核心是使用Babel获取AST&#xff08;词法分析)&#xff0c;然后或使用Babel自带函…

如何实现高质量的系统数据对接/API接口整合集成方案?

我们建立一个数字化系统可能会有跟别的系统进行数据对接的需要&#xff0c;而别人的数字化系统也有可能需要跟我们的系统进行数据对接&#xff0c;也可能我们开发了不同的网站&#xff0c;网站小应用之间需要进行数据对接。那么数据对接应该如何操作呢&#xff1f;怎么才能更好…

数据分析:SQL和Python

SQL 统计数据概况&#xff1a;计算样本总数、商家总数、用户总数、消费总数、领券总数等 selectcount(User_id) as 样本总数,count(distinct Merchant_id) as 商家总数,count(distinct User_id) as 用户总数,count(Date) as 消费总数,count(Date_received) as 领券总数,(sele…