JDK1.7日期时间操作



示例小结

public class DateTest {

    public static final String FORMAT_DATE = "yyyy-MM-dd";
public static final String FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String FORMAT_MIN = "yyyy-MM-dd HH:mm";
public static final String FORMAT_MILLISECOND = "yyyy-MM-dd HH:mm:ss.S";
private static String[] parsePatterns = {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm",
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm"}; /**
* SimpleDateFormat时间格式化
*/
@Test
public void test1() throws ParseException {
Date date = new Date();
/**
*常用格式:
* yyyy-MM-dd
* yyyy-MM-dd HH:mm:ss
* yyyy-MM-dd HH:mm
*/
//根据约定好的pattern时间格式进行格式化和解析
SimpleDateFormat dateFormat = new SimpleDateFormat(FORMAT);
//格式化
String dateStr = dateFormat.format(date);
System.out.println(dateStr);
//字符串解析成date对象
Date parseDate = dateFormat.parse(dateStr);
System.out.println(parseDate);
}
/**
* 2021-12-04 00:49:39
* Sat Dec 04 00:49:39 CST 2021
*/ /**
* Calendar(抽象类)日历类的使用
*/
@Test
public void test2() {
//两种创建
// Calendar calendar = new GregorianCalendar();
//默认用getInstance()创建
Calendar calendar = Calendar.getInstance();
//get()
//根据日历类型获取数据
//当天日历对应的一个月的第几天
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
//set() 设置日期
calendar.set(Calendar.DAY_OF_MONTH, 9);
day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
//添加天数,负数表示减天数
calendar.add(Calendar.DAY_OF_MONTH, -1);
day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
//getTime() 日历类转Date
Date date = calendar.getTime();
System.out.println(date);
//根据Date日期设置日历
calendar.setTime(new Date());
day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
}
/**
* 4
* 9
* 8
* Wed Dec 08 01:55:33 CST 2021
* 4
*/ }

JDK1.8日期时间操作——重点

LocalDateTime





示例小结

public class JDKDateTest {

    @Test
public void test1() {
//创建日期对象
//获取当前日期时间 now()
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);
System.out.println(localTime);
System.out.println(localDateTime);
// 2021-12-04
// 23:44:44.112
// 2021-12-04T23:44:44.112
//创建指定日期时间的of()方法
LocalDateTime dateTime = LocalDateTime.of(2020, 10, 10, 12, 12, 12);
LocalDate date = LocalDate.of(2020, 10, 10);
LocalTime time = LocalTime.of(12, 12, 12);
System.out.println(dateTime);
System.out.println(date);
System.out.println(time);
// 2020-10-10T12:12:12
// 2020-10-10
// 12:12:12
//getXXX方法 获取时间里的年月日的值相关的属性
int dayOfYear = dateTime.getDayOfYear();
Month month = dateTime.getMonth();
int monthValue = dateTime.getMonthValue();
int dayOfMonth = dateTime.getDayOfMonth();
System.out.println(dayOfYear);
System.out.println(month);
System.out.println(monthValue);
System.out.println(dayOfMonth);
// 284
// OCTOBER
// 10
// 10
//withXXX() 设置指定的时间相关的属性返回新的日期,原来的日期是不变的
//LocalDateTime JDK时间不可变性,因此是线程安全的。
LocalDateTime withDateTime1 = dateTime.with(localDateTime);
LocalDateTime withDateTime2 = dateTime.withDayOfMonth(11);
System.out.println("原来日期:"+dateTime);
System.out.println("修改后日期1:"+withDateTime1);
System.out.println("修改后日期2:"+withDateTime2);
System.out.println("-----------------------------------");
// 原来日期:2020-10-10T12:12:12
// 修改后日期1:2021-12-04T23:44:44.112
// 修改后日期2:2020-10-11T12:12:12
//日期时间的添加删除
//可以直接添加想要添加的天数或其他属性值,返回的日期时间会自动处理为对应的日期时间
LocalDateTime plusDateTime = dateTime.plusDays(60);
LocalDateTime plusDateTime2 = dateTime.plusHours(70);
//加减时间都可以操作负数,负数对应就是相反的操作,没有问题
LocalDateTime minusDateTime1 = dateTime.minusDays(-1);
System.out.println("原来日期:"+dateTime);
System.out.println(plusDateTime);
System.out.println(plusDateTime2);
System.out.println(minusDateTime1);
// 原来日期:2020-10-10T12:12:12
// 2020-12-09T12:12:12
// 2020-10-13T10:12:12
// 2020-10-11T12:12:12
}
}

Instant——瞬时——类似于Date



示例小结

public class InstantTest {

    @Test
public void test1() {
//获取本初子午线对应的当前时间
Instant instant = Instant.now();
long timeMillis = System.currentTimeMillis();
System.out.println(instant);
// 2021-12-04T16:16:27.593Z
//添加东八区时间的偏移量
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime);
// 2021-12-05T00:16:27.593+08:00
//获取19701-1-1 00:00:00到现在的毫秒数,类似于System.currentTimeMillis()
long epochMilli = instant.toEpochMilli();
System.out.println("toEpochMilli "+epochMilli);
System.out.println("currentTimeMillis "+timeMillis);
// toEpochMilli 1638634587593
// currentTimeMillis 1638634587593
//根据时间戳获取Instant示例,类似于Date(long date)
Instant instant1 = Instant.ofEpochMilli(epochMilli);
System.out.println(instant1);
// 2021-12-04T16:16:27.593Z
}
}

DateTimeFormatter——格式化解析

时间格式化注意

yyyy-MM-dd HH:mm:ss HH表示24小时时间制
yyyy-MM-dd hh:mm:ss HH表示12小时时间制

代码示例

    @Test
public void test2(){
LocalDateTime now = LocalDateTime.now();
//自定义格式化类型ofPattern()
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//格式化
String nowStr = formatter.format(now);
System.out.println(nowStr);
//2021-12-05 00:49:37
//解析
LocalDateTime dateTime = LocalDateTime.parse(nowStr, formatter);
System.out.println(dateTime);
//2021-12-05T00:49:37
TemporalAccessor parse1 = formatter.parse(nowStr);
System.out.println(parse1);
// {},ISO resolved to 2021-12-05T00:49:37
//强转报错,要使用LocalDateTime.parse(nowStr, formatter);
//java.lang.ClassCastException: java.time.format.Parsed cannot be cast to java.time.LocalDateTime
// LocalDateTime parse2 = (LocalDateTime) formatter.parse(nowStr);
// System.out.println(parse2);
}





其他

UTC 和 GMT的区别是什么啊?

GMT(Greenwish Mean Time 格林威治平时),这是UTC的民间名称。GMT=UTC

没有区别。

参考

Java入门视频教程

480-488

Java日期时间操作基础——包含JDK1.8时间操作新特性的更多相关文章

  1. 黑马程序员_Java基础:JDK1.5后的新特性:自动拆装箱,以及注意事项

    ------- android培训.java培训.期待与您交流! ---------- 首先来看一段代码: Integer x = new Integer(4); Integer y = 4; 在JD ...

  2. Java基础加强-jdk1.5的一些新特性

    JDK 5.0 特性 1.静态导入(import static 语句导入一个类中的某个静态方法或所有静态方法) 如: import static java.lang.Math.*; 2.可变参数 1. ...

  3. 总结:JDK1.5-JDK1.8各个新特性

    JDK1.5-JDK1.8各个新特性 JDK各个版本的新特性 要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言.以下介绍一下JDK1 ...

  4. jdk1.5出现的新特性---->增强for循环

    import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; ...

  5. [转]【JVM】调优笔记2-----JVM在JDK1.8以后的新特性以及VisualVM的安装使用

    [From]https://www.cnblogs.com/sxdcgaq8080/p/7156227.html               隔壁的,加个引用做书签! [JVM]调优笔记2-----J ...

  6. JDK1.8之后的新特性和新接口

    接口的旧特性: 就特性下接口中只有: 常量(必须赋值) 抽象方法abstract(和final static private三个关键字冲突) interface Inter { //int a ; / ...

  7. JDK1.5后的新特性之一:可变参数

    Java中的可变参数 Java1.5后出现了一个新特性,即可变参数,格式为:类型 …参数 例如: 总的来说,可变参数可以当成是数组来用: public void testSum() { System. ...

  8. 转:【Java并发编程】之二十二:并发新特性—障碍器CyclicBarrier(含代码)

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17512983 CyclicBarrier(又叫障碍器)同样是Java5中加入的新特性,使用 ...

  9. Java基础知识总结之1.8新特性lambda表达式

    函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的java.lang.Runnab ...

随机推荐

  1. JVM:Hotspot虚拟机中的对象

    在HotSpot虚拟机中,对象在内存中存储的布局可以被分为3个区域:对象头(Header).实例数据(Instance data)和对齐填充(Padding).对象头包括两部分信息,第一部分存储自身的 ...

  2. EasyX安装教程

    Easyx是什么 就是一款可以在Windows里让你的C++程序里显示图片等的工具. 注意:EasyX不支持Linux.MacOS.不过还有Qt等可以选择. 安装VC/VS Easyx只支持Visua ...

  3. 云知声 Atlas 超算平台: 基于 Fluid + Alluxio 的计算加速实践

    Fluid 是云原生基金会 CNCF 下的云原生数据编排和加速项目,由南京大学.阿里云及 Alluxio 社区联合发起并开源.本文主要介绍云知声 Atlas 超算平台基于 Fluid + Alluxi ...

  4. linux&c 进程控制 课后习题

    (声明:本篇博客只是博主自己的理解,加以整理,目的是总结刚学过的进程知识,不一定绝对正确,非常愿意听客官您提出宝贵意见.) Q1:进程中的全局数据段(全局变量),局部数据段(局部变量),静态数据段的分 ...

  5. linux 安装docker(一)

    1.安装环境 此处在Centos7进行安装,可以使用以下命令查看CentOS版本 lsb_release -a 在 CentOS 7安装docker要求系统为64位.系统内核版本为 3.10 以上,可 ...

  6. robot_framewok自动化测试--(6)Collections 库

    Collections 库 Collections 库同样为 Robot Framework 标准类库,它所提供的关键字主要用于列表.索引.字典的处理. 在使用之前需要在测试套件(项目)中添加: 1. ...

  7. dart系列之:dart语言中的异常

    目录 简介 Exception和Error Throw和catch Finally 总结 简介 Exception是程序中的异常情况,在JAVA中exception有checked Exception ...

  8. 『学了就忘』Linux软件包管理 — 42、对RPM软件包的查询操作

    目录 1.查询RPM软件包是否安装 2.查询系统中所有已安装的RPM软件包 3.查询RPM软件包的详细信息 4.查询RPM软件包中的文件列表 5.查询系统文件属于哪个RPM包 6.查询RPM软件包所依 ...

  9. Python学习周总结(二)

    Python-SecondWeek知识汇总 本周学了好多内容,最头痛的地方还是自己的思维逻辑不过关,还是敲的代码比较少,一个员工管理系统,第一天写搞得头大 ,结果第三遍自己突然懂了,个人的努力才是自己 ...

  10. java miniui(datagrid) 取值赋值

    ... (本想放项目代码上来的 可是这放上去就看不了不知为何,下面是项目中的代码) // 获取时间设置到时间上,加载没有那个快,所以需要先加载完数据然后才能获取 function obtain(e) ...