Java中常用时间的一些相关方法
作者:影子930 发布时间:2022-02-06 11:33:38
标签:java,时间,处理
前言
在我们java开发中,Date日期这个字段会被经常使用,比如获取当前系统的时间,获取上个月,上一年的时间,以及获取两个日期相差的时分秒数,或者对日期类型进行格式化,等等,等等,下面将给大家详细介绍下Java中常用时间的一些相关方法
一、获取当前时间的方式
public static void main(String[] args) {
//Date
Date now = new Date();
System.out.println(now);
//java8的时间
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
Calendar calendar = Calendar.getInstance();
Date time = calendar.getTime();
System.out.println(time);
System.out.println("年" + calendar.get(Calendar.YEAR));
System.out.println("月" + (calendar.get(Calendar.MONTH) + 1));
//joda time
DateTime dateTime = DateTime.now();
System.out.println(dateTime);
}
获取当前时间可以使用Date LocalDatetime Calendar Datetime
二、获取当月第n天
public static void main(String[] args) {
//建议使用Calendar 可以设置年月日时分秒
Calendar calendar = Calendar.getInstance();
////当月16
calendar.set(Calendar.DAY_OF_MONTH, 16);
System.out.println(calendar.getTime());
//当月16
DateTime now = DateTime.now();
DateTime dateTime = now.withDayOfMonth(16);
System.out.println(dateTime);
//当月14
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime.withDayOfMonth(14));
//1月11
System.out.println(localDateTime.withMonth(1).withDayOfMonth(11));
}
三、格式化为字符串
```
//使用SimpleDateFormat
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(format.format(new Date()));
//使用Calendar
Calendar calendar = Calendar.getInstance();
System.out.println(String.format("%s年%s月%s日%s时%s分%s秒", calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH) + 1, calendar.get(Calendar.DAY_OF_MONTH),
calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND)));
LocalDateTime now = LocalDateTime.now();
String str = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println(str);
```
四、加减时间(单位可以是秒,小时等)
public static void main(String[] args) {
Date now = new Date();
//加一小时
long time = now.getTime() + (60 * 60 * 1000);
System.out.println(new Date(time));
/*
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.14</version>
</dependency>
*/
//引入Hutool 加一小时
System.out.println(DateUtil.offset(now, DateField.HOUR, 1));
//减一小时
System.out.println(DateUtil.offset(now, DateField.HOUR, -1));
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("加一小时" + localDateTime.plusHours(1));
System.out.println("减一小时" + localDateTime.minusHours(1));
DateTime dateTime = DateTime.now();
System.out.println(dateTime.plusHours(1));
System.out.println(dateTime.minusHours(1));
}
LocalDateTime和DateTime都自带增加和减少时间的方法
五、通过出生日期获取年龄
public static void main(String[] args) {
//时间1990-12-05
DateTime birthDay = DateTime.now().withYear(1990).withMonthOfYear(10).withDayOfMonth(23);
System.out.println(birthDay);
//获取相差得年 会进行月份和日期比较 如
Years years = Years.yearsBetween(birthDay, new DateTime());
System.out.println(years);
System.out.println(years.getYears());
}
还可以使用年份相减,再比较月,日的方法得到生日
六、判断两个时间段是否覆盖
public static void main(String[] args) {
DateTime now = DateTime.now();
DateTime start1 = now;
DateTime end1 = now.plusMinutes(1);
DateTime start2 = now.plusSeconds(50);
DateTime end2 = now.plusMinutes(2);
Interval interval1 = new Interval(start1, end1);
Interval interval2 = new Interval(start2, end2);
System.out.println(interval1.overlaps(interval2));
System.out.println(start1.getMillis() < end2.getMillis() && start2.getMillis() < end1.getMillis());
}
七、求两个时间间隔
public static void main(String[] args) {
DateTime now = DateTime.now();
//开始时间
Date startTime = now.toDate();
//结束时间
Date endTime = now.plusHours(1).toDate();
//1小时
System.out.println("开始时间与结束时间的时间间隔:" + DateUtil.between(startTime, endTime, DateUnit.SECOND));
long time = (endTime.getTime() - startTime.getTime()) / 1000;
System.out.println(time);
}
八、UTC时间与北京时间转换
public static void main(String[] args) throws ParseException {
Date now = new Date();
Date utcDate = bj2UTC(now);
//utc时间
System.out.println(utcDate);
//北京时间
System.out.println(utc2BJ(utcDate));
DateTime dateTime = DateTime.now().withDayOfMonth(1).withHourOfDay(0).withMinuteOfHour(0).withSecondOfMinute(0);
System.out.println(dateTime);
System.out.println(bj2UTC(dateTime.toDate()));
}
public static Date bj2UTC(Date date) {
if (date == null) {
return null;
}
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.of("-8"));
return Date.from(localDateTime.atOffset(ZoneOffset.UTC).toInstant());
}
public static Date utc2BJ(Date date) {
if (date == null) {
return null;
}
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.of("+8"));
return Date.from(localDateTime.atOffset(ZoneOffset.UTC).toInstant());
}
北京时间=UTC+8
来源:https://juejin.cn/post/7022923059992461320
0
投稿
猜你喜欢
- 平常我们工作中基本最多两级嵌套,但是有时候难免会遇到 * 嵌套的业务场景,笔者最近就碰到了,使用一般的嵌套发现赋值为空,这可难倒了菜逼的我,后
- Java处理JSON数据有三个比较流行的类库FastJSON、Gson和Jackson。JacksonJackson是由其社区进行维护,简单
- 网上C#导出Excel的方法有很多。但用来用去感觉不够自动化。于是花了点时间,利用特性做了个比较通用的导出方法。只需要根据实体类,自动导出想
- sql语句CDATA标签的用法CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。
- 一、解决方案1声明:jdk1.8已经经过线上环境使用1. 调研JDK8的加密策略存在限制版本和无限制版本,随着越来越多的第三方工具只支持 J
- 五子棋AI算法也算是一个典型的游戏AI算法,一些棋类的AI算法都可以参考实现,下面是Java实现代码棋盘抽象接口import java.ut
- 软件版本:IDEA 2020.1Maven 3.6.3 认识静态资源和动态资源静态资源,包含HTMl,图片,CSS,JS等不需要与
- 在使用IDEA写代码的时候,打开tabs都挤在一行,当打开页面过多的时候,前面的页面无法直观看到,非常不方便。通过简单设置就可以实现tabs
- 本文实例为大家分享了Android匹配关键字标红的具体代码,供大家参考,具体内容如下1. 单关键字匹配若只需匹配 搜索内容 可以
- 本文实例为大家分享了C#实现QQ聊天窗口的具体代码,供大家参考,具体内容如下效果图:using System;using System.Co
- 我就废话不多说了,大家还是直接看代码吧~import com.alibaba.fastjson.JSON;import java.util.
- 第一种方法:string s=abcdeabcdeabcde;string[] sArray=s.Split(c) ;foreach(str
- 前言之前写过一篇关于配置中心对配置内容加密解密的介绍:《Spring Cloud构建微服务架构:分布式配置中心(加密解密) 》。在这篇文章中
- 在Java的线程执行中,不管是直接继承Thread的方式,还是实现Runnable接口的方式,都不会获取到线程执行的返回结果。这样如果线程在
- 我们在学习接口的时候。能够在里面做一些方法的调用。不过今天所要讲的JDBC,虽然也是连接数据库的一种接口,不过与类接口有着很大的区别,大家要
- 要用TextView使用渐变色,那我们就必须要了解LinearGradient(线性渐变)的用法。LinearGradient的参数解释Li
- Eureka 采用 CS(Client/Server,客户端/服务器) 架构,它包括以下两大组件:Eureka Server:Eureka
- 代码一/// <summary> /// 截断字符串 /// </su
- 简介AccessibilityService的设计初衷是为了辅助有身体缺陷的群体使用Android应用,它的设计贯穿着Android的控件树
- 在本篇介绍的Winform界面样式改变及存储操作中,是指基于DevExpress进行界面样式的变化。一般情况下,默认我们会为客户提供多种De