概念#

时区#

不同时区在同一时刻,它们的本地时间是不同的,全球一共有24个时区,我们把伦敦所在的时区称为标准时区,其他时区按照东西偏移的小时来区分,北京所在的时区是东八区(GMT+08:00)。时区的表现方式如下:GMT+08:00

UTC+08:00

CST(China Standard Time / Central Standard Time USA)

Asia/Shanghai

地区#

Local 表示一个国家或地区的日期、时间、数字、货币等格式zh_CN: 表示的是中国的Local,日期用年月日表示2020-07-05

en_US: 表示的是美国的Local,日期用日月年表示05/07/2020

计算机用Local在日期、时间、货币和字符串之间进行转换中国用户美国用户购买价格:12000.012,000.00

购买日期:2020-07-0505/07/2020

java.time的API#

java.time提供了新的日期和时间APILocalDate/LocalTime/LocalDateTime

ZonedDateTime/ZoneId

Instant

Formatter

...

新API的特点:严格区分日期、时间

不变类(类似String)

Month范围1~12(Jan~Dec)

Week范围1~7(Mon~Sun)

LocalDateTime#LocalDate d = LocalDate.now(); // 当前日期

LocalTime t = LocalTime.now(); //当前时间

LocalDateTime dt = LocalDateTime.now(); // 当前日期时间

System.out.println(dt); // 严格按照ISO 8601格式打印 2020-07-05T16:38:37.356

//指定日期和时间

LocalDate d2 = LocalDate.of(2020, 7, 5); // 2020-07-05,注意 7=7月

LocalTime t2 = LocalTime.of(16, 38, 37); // 16:38:37

LocalDateTime dt2 = LocalDateTime.of(2020, 7, 5,16, 38, 37); // 2020-07-05T16:38:37

LocalDateTime dt3 = LocalDateTime.of(d2, t2); // 2020-07-05T16:38:37

//对日期进行格式化a

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

System.out.println(dtf.format(LocalDateTime.now())); // 2020-07-05 16:45:08

//将字符串解析成日期

LocalDateTime parse = LocalDateTime.parse("2020-07-05 16:45:08", dtf);

System.out.println(parse); // 2020-07-05T16:45:08

新的DateTimeFormatter是不可变的。默认情况下,LocalDate,LocalTime,LocalDateTime按照ISO标准格式化和解析:yyyy-MM-dd

HH:mm:ss

HH:mm:ss:SSS

yyyy-MM-dd'T'HH:mm:ss

yyyy-MM-dd'T'HH:mm:ss:SSS

重大更新:对日期和时间进行加减plusDays() 在现在的日期加上具体天数

minusHous() 在现在的时间减去具体的小时

plusWeeks() 在现在的日期时间加上具体的周数// +5 天

LocalDate today = LocalDate.now();

LocalDate after5Days = today.plusDays(5);

System.out.println(after5Days); //2020-07-10

// -2小时

LocalTime now = LocalTime.now();

LocalTime before2Hours = now.minusHours(2);

System.out.println(before2Hours); // 14:59:22.526

// +1月-2周

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

System.out.println(date); // 2020-07-22

对日期和时间进行调整:withDayOfMonth()

withMonth()

withHour()

...

with()//本月第一天

LocalDate firstDay = LocalDate.now().withDayOfMonth(1);

System.out.println(firstDay); // 2020-07-01

//把秒和纳秒调整为0

LocalTime at = LocalTime.now().withSecond(0).withNano(0);

System.out.println(at); // 17:08

//本月最后一天

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

System.out.println(lastDay); // 2020-07-31

//本月第一个周日

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

System.out.println(firstSunday); //2020-07-05

判断日期和时间的先后:isBefore()

isAfter()

equals()LocalDate d01 = LocalDate.of(2020,7,5);

LocalDate d02 = LocalDate.of(2020,7,4);

System.out.println(d01.isBefore(d02)); // false

System.out.println(d01.isAfter(d02)); // true

计算日期的Period: 某一天到指定的某一天具体相差多久getYears()

getMonths()

getDays()LocalDate d03 = LocalDate.of(2020,7,5);

LocalDate d04 = LocalDate.of(2018,3,28);        //通过until()方法获取Period对象,判断两个日期相差?年?月?天

Period period = d03.until(d04);

System.out.println(period); // P-2Y-3M-8D 表示2020年7月5日到2018年3月28日中相差 2年3个月8天

//两个日期一共相差多少天?

long day01 = LocalDate.of(2020, 7, 5).toEpochDay();

long day02 = LocalDate.of(2018,3,28).toEpochDay();

System.out.println(day01-day02); // 830

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

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

ZonedDateTime#

ZonedDateTime = LocalDateTime + ZoneIdZonedDateTime: 带时区的日期和时间

ZoneId: 新的时区对象(取代旧的java.util.TimeZone)

Instant: 时刻对象(epoch seconds)ZonedDateTime zbj = ZonedDateTime.now(); // 当前时区的日期和时间

System.out.println(zbj); // 2020-07-05T17:32:40.415+08:00[Asia/Shanghai]

ZonedDateTime zny = ZonedDateTime.now(ZoneId.of("America/New_York")); // 纽约时区的当前日期和时间

System.out.println(zny); // 2020-07-05T05:34:29.522-04:00[America/New_York]

ZonedDateTime可以从LocalDateTime转换: atZone()//关联到当前默认时区

ZonedDateTime bj = ldt.atZone(ZoneId.systemDefault());

System.out.println(bj); // 2020-07-05T17:36:12+08:00[Asia/Shanghai]

//关联到纽约时区

ZonedDateTime ny = ldt.atZone(ZoneId.of("America/New_York"));

System.out.println(ny); // 2020-07-05T17:36:12-04:00[America/New_York]

转换时区:withZoneSamleInstant()LocalDateTime ldt = LocalDateTime.of(2020, 7, 5, 17, 36, 12);        //关联到当前默认时区

ZonedDateTime bj = ldt.atZone(ZoneId.systemDefault());

System.out.println(bj); // 2020-07-05T17:36:12+08:00[Asia/Shanghai]

// 转换到纽约时区

ZonedDateTime zdt = bj.withZoneSameInstant(ZoneId.of("America/New_York"));

System.out.println(zdt); // 2020-07-05T17:36:12-04:00[America/New_York]

Instant对象表示时刻:ZonedDateTime.toInstant()

Instant.getEpochSecond()Instant ins = Instant.now();

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

ZonedDateTime zdt = ins.atZone(ZoneId.of("Z"));        //注意是秒

long epoch = ins.getEpochSecond();

如果项目中需要使用generatorConfig.xml配置文件生成java8中的日期类型LocalDate、LocalTime、LocalDateTime等等,需要在配置文件中的javaTypeResolver结点中加入属性useJSR310Types,当useJSR310Types为true时,就会jdbc对应的日期类型会转成java8中的LocateDateTime类型,如果useJSR310Types为false,则还是转成java.util.Date类型。

一旦mybatis中使用了java8中的日期类型,记得要在项目中引入mybatis-typehandlers-jsr310,这个主要是处理java8中的日期类型。

org.mybatis

mybatis-typehandlers-jsr310

1.0.2

注意:用maven mybatis插件如果不在plugin里面添加依赖包的引用的话,会找不到相关得jar包,在plugin外部得jar包,他不会去找到并执行,所以要把plugin运行依赖得jar配置都放在里面,pom.xml配置 mybatis插件如下:

org.mybatis.generator

mybatis-generator-maven-plugin

1.3.7

org.mybatis

mybatis

3.4.6

mysql

mysql-connector-java

8.0.13

注意,在连接mysql8.0的时候要指明timeZone,即serverTimezone=UTC这个不能忘

java 接口开发时间_Java开发中的日期和时间使用相关推荐

  1. SQL获得当前的日期和时间与DB2 中操作日期和时间

    星期六 2007年08月18日 要使用 SQL 获得当前的日期.时间及时间戳记,请参考适当的 DB2 寄存器: SELECT current date FROM sysibm.sysdummy1 SE ...

  2. c语言:按年月日格式输出系统日期,按时分秒格式输出系统时间,C/C++中的日期和时间...

    以前看过一个笑话,有人问一geek:Can you tell me the time now?被这样回答:Of course,it's 1229883309 seconds since 1970/1/ ...

  3. 详解java中的日期与时间;新旧API对比;各种日期格式转换

    一.基本概念 1.本地时间 不同的时区,在同一时刻,本地时间是不同的. 全球一共分为24个时区,伦敦所在的时区称为标准时区,其他时区按东/西偏移的小时区分,北京所在的时区是东八区. 2.时区 GMT ...

  4. 【小家java】java8新特性之---全新的日期、时间API(JSR 310规范),附SpringMVC、Mybatis中使用JSR310的正确姿势

    [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小家java ...

  5. 关于Java中的日期与时间的相关类说明详解

    文章目录 1.关于Java元年与时间戳 2.关于Date类 2.1常用API代码展示 3.关于Calendar类 3.1获取Calendar对象 3.2创建自定义的Calendar对象 3.2Cale ...

  6. Java中获取日期和时间

    Java中获取日期和时间 1.创建 java.util.Calendar 实例,调用其 get()方法传入不同的参数即可获 得参数所对应的值 import java.util.Calender; // ...

  7. mysql 时间字符串 1_Mysql 中的日期时间字符串查询

    一.将数据库中的Date格式的数据,或者指定日期的字符串格式化为想要的样式 DATE_FORMAT (date, format)能根据格式串format 格式化日期或日期和时间值date,返回结果字符 ...

  8. Java基础之一组有用的类——生成日期和时间(TryDateFormats)

    控制台程序. java.util包中含有相当多的类涉及日期和时间,包括Date类.Calendar类和GregorianCalendar类. Date类对象其实定义了精确到毫秒的时刻,从1970年1月 ...

  9. android 一天多少毫秒,Android中的日期和时间以毫秒为单位

    我试图将给定的日期和时间转换为毫秒.我无法实现它.Android中的日期和时间以毫秒为单位 下面是日期和时间格式 02 - 07(DD - MM) 上午八时五十分00秒(HH毫米SS一) 这是我曾尝试 ...

  10. Java8中的日期与时间处理

    原文链接:http://www.importnew.com/15637.html 伴随lambda表达式.streams以及一系列小优化,Java 8 推出了全新的日期时间API,在教程中我们将通过一 ...

最新文章

  1. JDBC连接oracle连接池问题解决
  2. 【vsftpd】嵌入式linux简易配置vsftpd服务
  3. 从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler
  4. rx.observable_在Spring MVC流中使用rx-java Observable
  5. jqc3ff继电器引脚图_电气元件中间继电器的知识全面解读,欢迎电工朋友收藏!...
  6. Pytorch——Window上Pytorch的安装教程
  7. HALCON:内存管理(Memory Management)
  8. 程序员表白源码集合打包带走
  9. 博客搬家工具c/s实现方式
  10. MAC 用配置设置解决vscode中文乱码问题
  11. 鞋类电商出路考:成本洼地在哪里
  12. 机器心理学家:可能是未来唯一不会被AI取代的职业
  13. 如何用WikiExtractor提取维基百科词汇
  14. 《网蜂A8实战演练》——11.Linux 电容式触摸屏驱动
  15. 手机 9006 端口 不断的闪掉
  16. #LeetCode每日一题#的阶段回顾
  17. 【GCC系列】深入理解Linux内核 -- __no_sanitize_address宏定义
  18. 人工智能正从统计学习走向语境顺应:浅谈人工智能的三个阶段
  19. 老化座 芯片测试座 (苏州奥金斯电子)
  20. (面试必备)软件测试人员必备Linux命令操作(根据菜鸟教程整理更易查阅)

热门文章

  1. pytorch多gpu并行训练
  2. php删除session中的值,php如何删除session中数据
  3. Ubunt sudo免密码输入
  4. Android Thing专题5 I2C
  5. linux strace调试用法
  6. Android 使用 sendevent 模拟鼠标和键盘事件
  7. 常见的SAS接口类型、接口连接器外观详细解读
  8. ModuleNotFoundError: No module named ‘pygame’——Python3.6安装pip并下载pygame模块
  9. java 存储输入_java将用户输入信息保存至txt文件
  10. mysql怎么求平均体重_怎样计算平均身高和平均体重