java 接口开发时间_Java开发中的日期和时间使用
概念#
时区#
不同时区在同一时刻,它们的本地时间是不同的,全球一共有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开发中的日期和时间使用相关推荐
- SQL获得当前的日期和时间与DB2 中操作日期和时间
星期六 2007年08月18日 要使用 SQL 获得当前的日期.时间及时间戳记,请参考适当的 DB2 寄存器: SELECT current date FROM sysibm.sysdummy1 SE ...
- c语言:按年月日格式输出系统日期,按时分秒格式输出系统时间,C/C++中的日期和时间...
以前看过一个笑话,有人问一geek:Can you tell me the time now?被这样回答:Of course,it's 1229883309 seconds since 1970/1/ ...
- 详解java中的日期与时间;新旧API对比;各种日期格式转换
一.基本概念 1.本地时间 不同的时区,在同一时刻,本地时间是不同的. 全球一共分为24个时区,伦敦所在的时区称为标准时区,其他时区按东/西偏移的小时区分,北京所在的时区是东八区. 2.时区 GMT ...
- 【小家java】java8新特性之---全新的日期、时间API(JSR 310规范),附SpringMVC、Mybatis中使用JSR310的正确姿势
[小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小家java ...
- 关于Java中的日期与时间的相关类说明详解
文章目录 1.关于Java元年与时间戳 2.关于Date类 2.1常用API代码展示 3.关于Calendar类 3.1获取Calendar对象 3.2创建自定义的Calendar对象 3.2Cale ...
- Java中获取日期和时间
Java中获取日期和时间 1.创建 java.util.Calendar 实例,调用其 get()方法传入不同的参数即可获 得参数所对应的值 import java.util.Calender; // ...
- mysql 时间字符串 1_Mysql 中的日期时间字符串查询
一.将数据库中的Date格式的数据,或者指定日期的字符串格式化为想要的样式 DATE_FORMAT (date, format)能根据格式串format 格式化日期或日期和时间值date,返回结果字符 ...
- Java基础之一组有用的类——生成日期和时间(TryDateFormats)
控制台程序. java.util包中含有相当多的类涉及日期和时间,包括Date类.Calendar类和GregorianCalendar类. Date类对象其实定义了精确到毫秒的时刻,从1970年1月 ...
- android 一天多少毫秒,Android中的日期和时间以毫秒为单位
我试图将给定的日期和时间转换为毫秒.我无法实现它.Android中的日期和时间以毫秒为单位 下面是日期和时间格式 02 - 07(DD - MM) 上午八时五十分00秒(HH毫米SS一) 这是我曾尝试 ...
- Java8中的日期与时间处理
原文链接:http://www.importnew.com/15637.html 伴随lambda表达式.streams以及一系列小优化,Java 8 推出了全新的日期时间API,在教程中我们将通过一 ...
最新文章
- JDBC连接oracle连接池问题解决
- 【vsftpd】嵌入式linux简易配置vsftpd服务
- 从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler
- rx.observable_在Spring MVC流中使用rx-java Observable
- jqc3ff继电器引脚图_电气元件中间继电器的知识全面解读,欢迎电工朋友收藏!...
- Pytorch——Window上Pytorch的安装教程
- HALCON:内存管理(Memory Management)
- 程序员表白源码集合打包带走
- 博客搬家工具c/s实现方式
- MAC 用配置设置解决vscode中文乱码问题
- 鞋类电商出路考:成本洼地在哪里
- 机器心理学家:可能是未来唯一不会被AI取代的职业
- 如何用WikiExtractor提取维基百科词汇
- 《网蜂A8实战演练》——11.Linux 电容式触摸屏驱动
- 手机 9006 端口 不断的闪掉
- #LeetCode每日一题#的阶段回顾
- 【GCC系列】深入理解Linux内核 -- __no_sanitize_address宏定义
- 人工智能正从统计学习走向语境顺应:浅谈人工智能的三个阶段
- 老化座 芯片测试座 (苏州奥金斯电子)
- (面试必备)软件测试人员必备Linux命令操作(根据菜鸟教程整理更易查阅)
热门文章
- pytorch多gpu并行训练
- php删除session中的值,php如何删除session中数据
- Ubunt sudo免密码输入
- Android Thing专题5 I2C
- linux strace调试用法
- Android 使用 sendevent 模拟鼠标和键盘事件
- 常见的SAS接口类型、接口连接器外观详细解读
- ModuleNotFoundError: No module named ‘pygame’——Python3.6安装pip并下载pygame模块
- java 存储输入_java将用户输入信息保存至txt文件
- mysql怎么求平均体重_怎样计算平均身高和平均体重