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

日期

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这个类用来设置或者获取年、月、日、时、分、秒

public class CalendarTest {

public static void main(String[] args) {

//获取当前时间的一个Calendar对象

Calendar calendar = Calendar.getInstance();

//获取年

int y = calendar.get(Calendar.YEAR);

//获取月

int m = calendar.get(Calendar.MONTH);

//获取日

int d = calendar.get(Calendar.DAY_OF_MONTH);

//获取当前星期

int w = calendar.get(Calendar.DAY_OF_WEEK);

//获取小时

int hh = calendar.get(Calendar.HOUR_OF_DAY);

//获取分钟

int mm = calendar.get(Calendar.MINUTE);

//获取秒

int ss = calendar.get(Calendar.SECOND);

//获取毫秒

int ms = calendar.get(Calendar.MILLISECOND);

}

}

Date getTime()

long getTimelnMillis()

我们还可以设置指定时间

public class CalendarTest {

public static void main(String[] args) {

//获取当前时间的一个Calendar对象

Calendar calendar = Calendar.getInstance();

//可以通过 setTime(Date)设置时间

calendar.setTime(new Date());

//也可以通过 setTimeInMillis(long) System.currentTimeMillis() 获取当前系统时间 返回值为long类型

calendar.setTimeInMillis(System.currentTimeMillis());

//我们还可以清楚掉时间自己设置

calendar.clear();

//设置年

calendar.set(Calendar.YEAR,1999);

//设置月

calendar.set(Calendar.MONTH,10);

//设置日期

calendar.set(Calendar.DAY_OF_MONTH,24);

//设置小时

calendar.set(Calendar.HOUR_OF_DAY,11);

System.out.println(calendar.getTime());

}

}

时区转换

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

加减时间

//获取当前时间的一个Calendar对象

Calendar calendar = Calendar.getInstance();

//加五天

calendar.add(Calendar.DAY_OF_MONTH,5);

//减2天

calendar.add(Calendar.DAY_OF_MONTH,-2);

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

LocalDate(本地的日期)

LocalTime(本地的时间)

LocalTime(本地的日期和时间)

特点有

严格区分日期、时间

不变类(类似String)

Month范围1-12(Jan-Dec)

Week范围1-7(Mon-Sun)

//当前日期

LocalDate localDate = LocalDate.now();

//当前时间

LocalTime localTime = LocalTime.now();

//当前日期和时间

LocalDateTime localDateTime = LocalDateTime.now();

//指定日期和时间

LocalDate date = LocalDate.of(2020, 11, 21);

LocalTime time = LocalTime.of(21, 54, 12);

LocalDateTime dateTime1 = LocalDateTime.of(2020, 11, 21, 21, 54, 12);

LocalDateTime dateTime2 = LocalDateTime.of(date, time);

格式化日期Formatter

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

System.out.println(dateTimeFormatter.format(LocalDateTime.now()));

//打印结果

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

日期和时间的运算

LocalDate today = LocalDate.now();

//+5天

LocalDate localDate = today.plusDays(5);

//-2小时

LocalDateTime localDateTime = LocalDateTime.now();

LocalDateTime localDateTime1 = localDateTime.minusHours(2);

//+1月 -2周

LocalDate date = today.plusMonths(1).minusWeeks(2);

//本月的第一天

LocalDate.now().withDayOfMonth(1);

//本月的最后一天

LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());

//本月的第一个周日

LocalDate.now().with(TemporalAdjusters.firstInMonth(DayOfWeek.SUNDAY));

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

判断日期和时间的先后

isBefore()

isAfter()

equals()

LocalDate localDate1 = LocalDate.of(2020, 11, 21);

LocalDate localDate2 = LocalDate.of(2020, 11, 20);

//检查此日期是否早于指定日期

System.out.println(localDate1.isBefore(localDate2));

//检查此日期是否在指定的日期之后

System.out.println(localDate1.isAfter(localDate2));

//判断日期是否相等

System.out.println(localDate1.equals(localDate2));

计算两个日期之差

LocalDate localDate1 = LocalDate.of(2020, 11, 21);

LocalDate localDate2 = LocalDate.of(2079, 4, 20);

//获取两个日期之间的差作为Period 对象返回

Period period = localDate1.until(localDate2);

//打印结果为P58Y4M30D 表示相差 58年4个月30天

System.out.println(period);

//获取年 58

System.out.println(period.getYears());

//获取月 4

System.out.println(period.getMonths());

//获取天 30

System.out.println(period.getDays());

LocalDateTime无法与弄进行转换

因为LocalDateTime没有时区,无法确定某一时刻

ZonedDateTime有时区,可以与long进行转换

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

ZonedDateTime:带时区的日期和时间

ZoneId:新的时区对象(取代TimeZone)

Instant:时刻对象

//当前时区的日期和时间

ZonedDateTime localDateTime = ZonedDateTime.now();

//纽约时区的日期和时间

ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("America/New_York"));

可以从LocalDateTime转换

atZone()

LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 21, 8, 3, 3);

//关联到当前默认时区

ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault());

//关联到纽约时区

ZonedDateTime zonedDateTime1 = localDateTime.atZone(ZoneId.of("America/New_York"));

Instant对象表示时刻

Instant instant = ZonedDateTime.now().toInstant();

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

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

/**

* 根据不同时区显示不同的时间

* @param epoch

* @param locale

* @param zoneId

* @return

*/

public String epochToString(long epoch, Locale locale, String zoneId) {

Instant instant = Instant.ofEpochMilli(epoch);

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(

FormatStyle.MEDIUM, FormatStyle.SHORT

);

return dateTimeFormatter.withLocale(locale).format(ZonedDateTime.ofInstant(instant, ZoneId.of(zoneId)))

}

java 日期和时间_java 日期与时间操作相关推荐

  1. 时间日期类JAVA包含地区属性_Java常用类 | 时间和日期类

    开发中经常涉及到时间与日期,记录下Java中与时间和日期相关的API JDK8之前与时间日期相关的类 java.lang.System类 System类提供了一个公共的静态方法currentTimes ...

  2. java时间日期工具类_java日期处理工具类

    java日期处理工具类 import java.text.DecimalFormat; import java.text.ParsePosition; import java.text.SimpleD ...

  3. 在java中原始时间_Java 日期时间

    Java 日期时间 java.util包提供了Date类来封装当前的日期和时间. Date类提供两个构造函数来实例化Date对象. 第一个构造函数使用当前日期和时间来初始化对象. Date( ) 第二 ...

  4. java 公元前时间_Java日期和时间类简介

    Java 的日期和时间类位于 java.util 包中.利用日期时间类提供的方法,可以获取当前的日期和时间,创建日期和时间参数,计算和比较时间. Date 类 Date 类是 Java 中的日期时间类 ...

  5. java 月份起止时间_java已知时间的本周,本月,本年的起始时间

    String --->LocalDateTime /LocalDate --->String/Long 有一些项目需要展示本日,本周,本月,本年的相关统计信息,这时就需要根据当前日期(或者 ...

  6. java 日期 年数_java 日期加减天数、月数、年数的计算方式

    因为某个项目需要统计 近1周.近1个月.近6个月 等数据,所以在时间的加减上面想了很多方式,最后决定用java.util.Calendar java.util.Calendar ,提供了计算时间的方式 ...

  7. java 日期格式常量_Java 日期格式类

    Java格式 - Java日期格式类 Java 8有新的Date-Time API来处理日期和时间. 我们应该使用新的Java 8 Date-Time API来格式化和解析日期时间值. 如果我们正在编 ...

  8. java 字符串转utc时间_Java中转UTC时间字符串(含有T Z)为local时间

    在Java中我们需要转换相应格式的字符串,很多时候我们想到用SimpleDateFormat类来解析.但是最近我在调用一个第三方的接口时返回的 JSON字符串中有个expires字段的值是2014-0 ...

  9. java 当前utc时间_Java获取UTC时间的方法详解

    本文实例讲述了java获取utc时间的方法.分享给大家供大家参考,具体如下: 取得本地时间: java.util.calendar cal = java.util.calendar.getinstan ...

  10. java获取时间_java获取Date时间的各种方式汇总

    java获取Date时间的各种方式为大家分享如下 常用的时间获取方式 public class DateUtils { /** * 获取时间戳 * 输出结果:1438692801766 */ @Tes ...

最新文章

  1. 《构建之法》8.9.10
  2. Oracle的rownum原理和使用(整理几个达人的帖子)
  3. HDU 1828:Picture(扫描线+线段树 矩形周长并)
  4. HBase读性能优化策略
  5. html仿真花卉代码,仿真鲜花幼儿园手工教案
  6. 不借助第三方变量实现两个整数变量值的互换
  7. mysql 导入1045错误_解决MyQL数据库中1045错误的方法——Windows系统
  8. Shopee菲律宾站如何选品?听Shopee Man本土多店管理系统告诉你
  9. 牛客面经 | BAT、美团、360、滴滴新锐……2W字干货,这不仅仅是一篇面经
  10. 如何把照片kb缩小?详细步骤
  11. 阿里云Centos8 yum报错Failed to synchronize cache for repo ‘BaseOS‘解决方案,通过换文件的方式来解决。
  12. ②五元物联网芯片点亮led 庆科EMW3060 , 运行alios- blink程序
  13. MYSQL的下载与配置安装
  14. Leetcode 309. Best Time to Buy and Sell Stock with Cooldown
  15. 机器学习 day15异常检测
  16. 手把手教你批量收藏宗介和波妞壁纸
  17. Java学习案例:字符串中的数据排序
  18. 2014年至今参与的五个项目总结
  19. 公司给股票期权,我买还是不买?
  20. 【Python】excel格式转换操作 -操作Excel、Word、CSV(4)(保姆级图文注释+测试代码+api例程)

热门文章

  1. Anaconda 在线安装esri模块超时失败解决方法
  2. 量子编程法:简介和导引
  3. Java 模板引擎总结
  4. AI也会遭遇瓶颈 解析人工智能技术的存储性能需求
  5. 部分北邮往年机试题汇总
  6. 什么是智能制造,为什么它对传统制造业影响如此之大?
  7. sparkStreaming流式处理,接受socket数据,实现单词统计并且每个批次数据结果累加
  8. Flink+Iceberg环境搭建及生产问题处理
  9. Appgamekit制作消消乐小游戏(附代码)# 1
  10. 17家IT创业公司的血泪史(1)