java 日期与时间操作
我们先来了解一下基本的概念
日期
- 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中的时间操作
java中的时间操作不外乎这四种情况: 1.获取当前时间 2.获取某个时间的某种格式 3.设置时间 4.时间的运算 好,下面就针对这四种情况,一个一个搞定. 一.获取当前时间 有两种方式可以获得,第一 ...
- Java日期和时间
目录 Java 日期和时间 Java 日期和时间 学习自 http://blog.csdn.net/zjf280441589/article/details/50447533 Date类 Date 类 ...
- Java 日期与时间
章节 Java 基础 Java 简介 Java 环境搭建 Java 基本语法 Java 注释 Java 变量 Java 数据类型 Java 字符串 Java 类型转换 Java 运算符 Java 字符 ...
- java Joda-Time 对日期、时间操作
任何企业应用程序都需要处理时间问题.应用程序需要知道当前的时间点和下一个时间点,有时它们还必须计算这两个时间点之间的路径.使用 JDK 完成这项任务将非常痛苦和繁琐.现在来看看 Joda Time,一 ...
- [Java]Java日期及时间库插件 -- Joda Time.
来到新公司工作也有一个多月了, 陆陆续续做了一些简单的项目. 今天做一个新东西的时候发现了 Joda Time的这个东西, 因为以前用的都是JDK原生的时间处理API, 大家都知道Java原生的时间处 ...
- Java学习关于时间操作的应用类--Date类、Calendar类及其子类
Date类 Date类封装了当期时间和日期.与Java1.0定义的原始版的Date类相比,Date类发生了本质的变化.在Java1.1发布时,原始版Date类定义的许多功能被移进Calendar类和D ...
- Java8 日期、时间操作
一.简介 在Java8之前,日期时间API一直被开发者诟病,包括:java.util.Date是可变类型,SimpleDateFormat非线程安全等问题.故此,Java8引入了一套全新的日期时间处理 ...
- Python 日期和时间操作
Python提供了一个time 和calendar模块可以用于格式化日期和时间. 时间间隔是以秒为单位的浮点小数. 每个时间戳都是以自从1970年1月1日午夜(历元)经过了多长时间来表示. Pytho ...
- java日期和时间转换字符
日期和时间转换字符 字符 描述 例子 c 完整的日期和时间 Mon May 04 09:51:52 CDT 2009 F ISO 8601 格式日期 2004-02-09 D U.S. 格式日期 (月 ...
随机推荐
- 精尽Spring MVC源码分析 - HandlerAdapter 组件(二)之 ServletInvocableHandlerMethod
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- NET 5 Topshelf 或者WorkerServices搭建 Windows/Linux 服务
参考文章https://www.cnblogs.com/RainFate/p/12095793.html Topshelf Topshelf 是一个用来部署基于.NET Framework 开发的服务 ...
- 浅析Python装饰器
1.什么是装饰器 在介绍装饰器之前,我们先来思考一个问题:使用Python语言进行程序设计时,如果我们想扩展一个函数的功能,一般会怎么做呢? 比如,有一个名为print_info函数,当前该函数内只做 ...
- Solon 1.2.12 发布,新的惊喜
Solon 一个类似Springboot的微型开发框架.强调:克制 + 简洁 + 开放的原则.力求:更小.更快.更自由的体验. 所谓更小: 内核0.1m,最小Web开发单位0.2m(相比Springb ...
- 查看权限详情 将部门大类单据整合,将子类单据id去重合并
/** * 查看权限详情 * @param id 部门id * @return */ @GetMapping("getListInfo") public R getDetail(S ...
- sql模糊查询和根据日期筛选
<!-- 查询统计列表 --> >= 小于等于 <=大于等于 将字符类型转换成日期格式进行比较 select * from xy_platformMessage ...
- Daphile 安装手册 -- 官方文档译文 [原创]
Daphile 安装手册(Daphile Installation) 英文原文:https://www.daphile.com/download/DaphileInstallation.pdf 采集日 ...
- lambda表达式之方法引用
/** * 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器.<br> * 与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码. ...
- C++模板元编程----堆排序
目录 目录 前言 实现的一些小细节 Debug 惰性求值 总结 Ref 前言 经过前两次经验的积累,终于来到了麻烦的堆排序.在一开始接触模板元编程的时候,我就期望有一天能够写出元编程堆排序的代码.原因 ...
- ES6箭头函数与this指向
一.ES6箭头函数 ES6之前的语法想要定义一个函数,如图example1,ES6之后定义一个函数如图example2,相比较之下简洁了很多 二.函数的this指向 非箭头函数,谁调用函数this指向 ...