我们先来了解一下基本的概念

日期

  • 2020-11-21
  • 2020-11-22

时间

  • 15:36:43
  • 2020-11-21 15:36:43

时区

  • 北京时间 2020-11-21 15:36:43
  • 东京时间 2020-11-21 16:36:43

地区

Locale表示一个国家或地区的日期、时间、数字、货币等格式

时间

  • zh_CN : 2020-11-21 //表示中国的locale
  • en_US : 21/11/2020 //表示纽约的locale

价格

  • 12000.00 //中国
  • 12,000.00 //美国

现在介绍第一个类:Calendar

Calendar这个类用来设置或者获取年、月、日、时、分、秒

  1. public class CalendarTest {
  2. public static void main(String[] args) {
  3. //获取当前时间的一个Calendar对象
  4. Calendar calendar = Calendar.getInstance();
  5. //获取年
  6. int y = calendar.get(Calendar.YEAR);
  7. //获取月
  8. int m = calendar.get(Calendar.MONTH);
  9. //获取日
  10. int d = calendar.get(Calendar.DAY_OF_MONTH);
  11. //获取当前星期
  12. int w = calendar.get(Calendar.DAY_OF_WEEK);
  13. //获取小时
  14. int hh = calendar.get(Calendar.HOUR_OF_DAY);
  15. //获取分钟
  16. int mm = calendar.get(Calendar.MINUTE);
  17. //获取秒
  18. int ss = calendar.get(Calendar.SECOND);
  19. //获取毫秒
  20. int ms = calendar.get(Calendar.MILLISECOND);
  21. }
  22. }
  • Date getTime()
  • long getTimelnMillis()

我们还可以设置指定时间

  1. public class CalendarTest {
  2. public static void main(String[] args) {
  3. //获取当前时间的一个Calendar对象
  4. Calendar calendar = Calendar.getInstance();
  5. //可以通过 setTime(Date)设置时间
  6. calendar.setTime(new Date());
  7. //也可以通过 setTimeInMillis(long) System.currentTimeMillis() 获取当前系统时间 返回值为long类型
  8. calendar.setTimeInMillis(System.currentTimeMillis());
  9. //我们还可以清楚掉时间自己设置
  10. calendar.clear();
  11. //设置年
  12. calendar.set(Calendar.YEAR,1999);
  13. //设置月
  14. calendar.set(Calendar.MONTH,10);
  15. //设置日期
  16. calendar.set(Calendar.DAY_OF_MONTH,24);
  17. //设置小时
  18. calendar.set(Calendar.HOUR_OF_DAY,11);
  19. System.out.println(calendar.getTime());
  20. }
  21. }

时区转换

  1. calendar.setTimeZone(TimeZone.getTimeZone("America/New_York"));

加减时间

  1. //获取当前时间的一个Calendar对象
  2. Calendar calendar = Calendar.getInstance();
  3. //加五天
  4. calendar.add(Calendar.DAY_OF_MONTH,5);
  5. //减2天
  6. calendar.add(Calendar.DAY_OF_MONTH,-2);

我们再来讲第二个类:LocalDateTime(新)

LocalDate(本地的日期)

LocalTime(本地的时间)

LocalTime(本地的日期和时间)

特点有

  • 严格区分日期、时间
  • 不变类(类似String)
  • Month范围1-12(Jan-Dec)
  • Week范围1-7(Mon-Sun)
  1. //当前日期
  2. LocalDate localDate = LocalDate.now();
  3. //当前时间
  4. LocalTime localTime = LocalTime.now();
  5. //当前日期和时间
  6. LocalDateTime localDateTime = LocalDateTime.now();
  7. //指定日期和时间
  8. LocalDate date = LocalDate.of(2020, 11, 21);
  9. LocalTime time = LocalTime.of(21, 54, 12);
  10. LocalDateTime dateTime1 = LocalDateTime.of(2020, 11, 21, 21, 54, 12);
  11. LocalDateTime dateTime2 = LocalDateTime.of(date, time);

格式化日期Formatter

  1. DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  2. System.out.println(dateTimeFormatter.format(LocalDateTime.now()));
  3. //打印结果
  4. 2020-11-21 22:00:19

默认按照ISO标准化进行格式化和解析

  • yyyy-MM-dd
  • HH:mm:ss
  • HH:mm:ss.SSSS
  • yyyy-MM-dd HH:mm:ss
  • yyyy-MM-dd HH:mm:ss.SSSS

日期和时间的运算

  1. LocalDate today = LocalDate.now();
  2. //+5天
  3. LocalDate localDate = today.plusDays(5);
  4. //-2小时
  5. LocalDateTime localDateTime = LocalDateTime.now();
  6. LocalDateTime localDateTime1 = localDateTime.minusHours(2);
  7. //+1月 -2周
  8. LocalDate date = today.plusMonths(1).minusWeeks(2);
  9. //本月的第一天
  10. LocalDate.now().withDayOfMonth(1);
  11. //本月的最后一天
  12. LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
  13. //本月的第一个周日
  14. LocalDate.now().with(TemporalAdjusters.firstInMonth(DayOfWeek.SUNDAY));

更多的运算方法你们可以ctrl + 鼠标左键查看LocalDateTime的源码

判断日期和时间的先后

  • isBefore()
  • isAfter()
  • equals()
  1. LocalDate localDate1 = LocalDate.of(2020, 11, 21);
  2. LocalDate localDate2 = LocalDate.of(2020, 11, 20);
  3. //检查此日期是否早于指定日期
  4. System.out.println(localDate1.isBefore(localDate2));
  5. //检查此日期是否在指定的日期之后
  6. System.out.println(localDate1.isAfter(localDate2));
  7. //判断日期是否相等
  8. System.out.println(localDate1.equals(localDate2));

计算两个日期之差

  1. LocalDate localDate1 = LocalDate.of(2020, 11, 21);
  2. LocalDate localDate2 = LocalDate.of(2079, 4, 20);
  3. //获取两个日期之间的差作为Period 对象返回
  4. Period period = localDate1.until(localDate2);
  5. //打印结果为P58Y4M30D 表示相差 58年4个月30天
  6. System.out.println(period);
  7. //获取年 58
  8. System.out.println(period.getYears());
  9. //获取月 4
  10. System.out.println(period.getMonths());
  11. //获取天 30
  12. System.out.println(period.getDays());

LocalDateTime无法与弄进行转换

  • 因为LocalDateTime没有时区,无法确定某一时刻
  • ZonedDateTime有时区,可以与long进行转换

那我们就来讲讲ZonedDateTime:带时区的日期和时间

  • ZonedDateTime:带时区的日期和时间
  • ZoneId:新的时区对象(取代TimeZone)
  • Instant:时刻对象
  1. //当前时区的日期和时间
  2. ZonedDateTime localDateTime = ZonedDateTime.now();
  3. //纽约时区的日期和时间
  4. ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("America/New_York"));

可以从LocalDateTime转换

  • atZone()
  1. LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 21, 8, 3, 3);
  2. //关联到当前默认时区
  3. ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault());
  4. //关联到纽约时区
  5. ZonedDateTime zonedDateTime1 = localDateTime.atZone(ZoneId.of("America/New_York"));

Instant对象表示时刻

  1. Instant instant = ZonedDateTime.now().toInstant();
  2. long epochSecond = instant.getEpochSecond();//返回long 可以与long进行转换

这里再额外提一点 新旧API中时间类型对应的数据库时间类型

数据库 对应Java类(旧) 对应Java类(新)
DATETIME java.util.Date LocalDateTime
DATE java.sql,Date LocalDate
TIME java.sql.Time LocalTime
TIMESTAMP java.sql.Timestamp LocalDateTime

再附送一个开箱即用的根据不同时区显示不同时间的的工具方法

  1. /**
  2. * 根据不同时区显示不同的时间
  3. * @param epoch
  4. * @param locale
  5. * @param zoneId
  6. * @return
  7. */
  8. public String epochToString(long epoch, Locale locale, String zoneId) {
  9. Instant instant = Instant.ofEpochMilli(epoch);
  10. DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(
  11. FormatStyle.MEDIUM, FormatStyle.SHORT
  12. );
  13. return dateTimeFormatter.withLocale(locale).format(ZonedDateTime.ofInstant(instant, ZoneId.of(zoneId)))
  14. }

java 日期与时间操作的更多相关文章

  1. JAVA中的时间操作

    java中的时间操作不外乎这四种情况: 1.获取当前时间 2.获取某个时间的某种格式 3.设置时间 4.时间的运算 好,下面就针对这四种情况,一个一个搞定. 一.获取当前时间 有两种方式可以获得,第一 ...

  2. Java日期和时间

    目录 Java 日期和时间 Java 日期和时间 学习自 http://blog.csdn.net/zjf280441589/article/details/50447533 Date类 Date 类 ...

  3. Java 日期与时间

    章节 Java 基础 Java 简介 Java 环境搭建 Java 基本语法 Java 注释 Java 变量 Java 数据类型 Java 字符串 Java 类型转换 Java 运算符 Java 字符 ...

  4. java Joda-Time 对日期、时间操作

    任何企业应用程序都需要处理时间问题.应用程序需要知道当前的时间点和下一个时间点,有时它们还必须计算这两个时间点之间的路径.使用 JDK 完成这项任务将非常痛苦和繁琐.现在来看看 Joda Time,一 ...

  5. [Java]Java日期及时间库插件 -- Joda Time.

    来到新公司工作也有一个多月了, 陆陆续续做了一些简单的项目. 今天做一个新东西的时候发现了 Joda Time的这个东西, 因为以前用的都是JDK原生的时间处理API, 大家都知道Java原生的时间处 ...

  6. Java学习关于时间操作的应用类--Date类、Calendar类及其子类

    Date类 Date类封装了当期时间和日期.与Java1.0定义的原始版的Date类相比,Date类发生了本质的变化.在Java1.1发布时,原始版Date类定义的许多功能被移进Calendar类和D ...

  7. Java8 日期、时间操作

    一.简介 在Java8之前,日期时间API一直被开发者诟病,包括:java.util.Date是可变类型,SimpleDateFormat非线程安全等问题.故此,Java8引入了一套全新的日期时间处理 ...

  8. Python 日期和时间操作

    Python提供了一个time 和calendar模块可以用于格式化日期和时间. 时间间隔是以秒为单位的浮点小数. 每个时间戳都是以自从1970年1月1日午夜(历元)经过了多长时间来表示. Pytho ...

  9. java日期和时间转换字符

    日期和时间转换字符 字符 描述 例子 c 完整的日期和时间 Mon May 04 09:51:52 CDT 2009 F ISO 8601 格式日期 2004-02-09 D U.S. 格式日期 (月 ...

随机推荐

  1. Git的使用上传与下载github

    下载git 下载git工具是第一步 Git的使用上传与下载 创建本地仓库 在选择的文件夹中鼠标右键打开git Bash here ,在命令行输入git init创建该文件夹的本地仓库 将文件夹文件提交 ...

  2. [日常摸鱼]Uva11178Morley's Theorem-几何

    题意:给一个$\Delta ABC$,分别做三个角的三等分线相交成$\Delta DEF$,求出$D,E,F$的坐标. 直接根据题意模拟 #include<cstdio> #include ...

  3. Python高级语法-贯彻回顾-元类(4.99.1)

    @ 目录 1.为什么要掌握元类 2.正文 关于作者 1.为什么要掌握元类 在django中编写models的时候遇到了元类的相关操作 并且在mini-web框架编写的时候也遇到了相关的问题 意识到深入 ...

  4. iNeuOS工业互联平台,图表与数据点组合成新组件,进行项目复用

    目       录 1.      概述... 1 2.      演示信息... 2 3.      应用过程... 2 1.   概述 针对有些行业的数据已经形成了标准化的建模或者有些公司专注于某 ...

  5. 学习tomcat-如何建立连接,处理请求

    tomcat如何建立连接,处理请求 学习探讨tomcat如何建立网络连接协议,并处理客户端过来的请求 建立http网络连接,指定通信协议 tomcat在创建时,会创建连接对象,负责处理客户端的请求,基 ...

  6. 神经网络高维互信息计算Python实现(MINE)

    论文 Belghazi, Mohamed Ishmael, et al. " Mutual information neural estimation ."  Internatio ...

  7. Python Cvxopt安装及LP求解

    Python 2.7 Pycharm 1.直接File>Settings>Project>InterPreter ,点击右侧'+' 弹出Available packages窗口,搜索 ...

  8. asp.net webapi 给字段赋初始值DefaultValue 解决前端传空字符串后台接受不是“”而是NULL

    /// <summary> /// 存储ID /// </summary> public Guid SaveID { get; set; } /// <summary&g ...

  9. MALL的学习笔记启动计划

    基本网络文档:http://www.macrozheng.com/#/ 电子书: Spring: <Spring实战(第4版)> Springboot: <Spring Boot实战 ...

  10. Spring Cloud 各个组件角色简介

    概述 SpringCloud 是一个全家桶式的技术栈,包含了很多组件:包含 Eureka.Ribbon.Feign.Zuul .Hystrix等.每个组件完成对应的功能 组件介绍 - 服务发现 Eur ...