现在我们只需要记住:因为 SimpleDateFormat 不是线程安全的,使用的时候,只能在方法内部创建新的局部变量。而 DateTimeFormatter 可以只创建一个实例,到处引用。...旧 API 转新 API 如果要把旧式的 Date 或 Calendar 转换为新 API 对象,可以通过 toInstant() 方法转换为 Instant 对象,再继续转换为 ZonedDateTime...,旧的 TimeZone 提供了一个 toZoneId(),可以把自己变成新的 ZoneId。...新 API 转旧 API 如果要把新的 ZonedDateTime 转换为旧的 API 对象,只能借助 long 型时间戳做一个“中转”: // ZonedDateTime -> long: ZonedDateTime...下表是数据库类型与 Java 新旧 API 的映射关系: 数据库 对应 Java 类(旧) 对应 Java 类(新) DATETIME java.util.Date LocalDateTime DATE
:使用默认的构造器 SimpleDateFormat sdf = new SimpleDateFormat(); 按照指定的方式格式化和解析:调用带参的构造器 SimpleDateFormat...(date); System.out.println(format1);//2019-02-18 11:48:27 //解析:要求字符串必须是符合SimpleDateFormat...Instant.now(); System.out.println(instant);//2019-02-18T07:29:41.719Z //添加时间的偏移量...-02-18T15:42:18.797 //解析:字符串 -->日期 TemporalAccessor parse = formatter.parse("2019-02...-02-18 03:52:09 //解析 TemporalAccessor accessor = formatter3.parse("2019-02-18 03:52:
Java 8:新的时间和日期API 在Java 8之前,所有关于时间和日期的API都存在各种使用方面的缺陷,因此建议使用新的时间和日期API,分别从旧的时间和日期的API的缺点以及解决方法、Java 8...新的时间和日期API进行讲解。...Thu Sep 12 13:47:34 CST 2019 可以使用 SimpleDateFormat 对时间进行格式化,但 SimpleDateFormat 是线程不安全的,SimpleDateFormat...calb中中属性设置cal 返回设置好的cal对象 但是这三步不是原子操作,导致解析出来的时间可以是错误的。...和 parse 方法的地方进行加锁 => 线程阻塞性能差 使用 ThreadLocal 保证每个线程最多只创建一次 SimpleDateFormat 对象 => 较好的方法 Java 8 新的时间和日期
是一个以与语言环境有关的方式来格式化和解析日期的具体类。...它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。使用SimpleDateFormat的format方法,将一个Date类型转化成String类型,并且可以指定输出格式。...在使用 SimpleDateFormat 时可以解析大于或者等于定义的时间精度,但不能解析小于它定义的时间精度,并且 SimpleDateFormat 是线程不安全的,在多线程环境下操作会抛出异常。...System.out.println((simpleDateFormat).parse(date_02)); } } 执行上述代码,输出结果如下: 在解析精度较小的时间时出现了报错...解决 SimpleDateFormat 是线程不安全的方式有: 定义为一个局部变量,局部变量不会受多线程的影响 使用 ThreadLocal 可以保存各自线程中共独立的数据,互相不会收到干扰,但是需要维护
:00 CST 2019 d2:Mon Jun 10 22:02:00 CST 2019 DateFormat类 ?...DateFormat.jpg Date → String(格式化) //(这个是具体子类SimpleDateFormat的父类DateForamt中的一个方法) Public final String...format(Date date) String→ Date(解析) parse () public Date parse(String source) DateFormat: 可以进行日期和字符串的格式化和解析...*/ package cn.bwh_02_DateFormat; import java.text.SimpleDateFormat; import java.util.Date; public class...//(amount可以是负的) public void add(int field,int amount) //设置当前日历的年月日 public final void set(int year,int
所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在解析时与输入字符串进行匹配。 ...对于解析来说,两种形式都是可接受的,与模式字母的数量无关。Number: 对于格式化来说,模式字母的数量是最小的数位,如果数位不够,则用 0 填充以达到此数量。...因此,在相同的模式下, “01/02/3” 或 “01/02/003” 解释为公元 3 年 1 月 2 日。同样,”01/02/-3” 解析为公元前 4 年 1 月 2 日。 ...格式是与语言环境无关的,并且数字必须取自 Unicode 标准的 Basic Latin 块。 对于解析来说,RFC 822 time zones 也是可接受的。...在这些字符串中,以上所述的模式字母可以用其他与语言环境有关的模式字母来替换。SimpleDateFormat 不处理除模式字母之外的文本本地化;而由类的客户端来处理。
主要是用它进行时间的格式化输出和解析,挺方便快捷的,但是SimpleDateFormat并不是一个线程安全的类。在多线程情况下,会出现异常,想必有经验的小伙伴也遇到过。...因为我们声明SimpleDateFormat为static变量,那么它的Calendar变量也就是一个共享变量,可以被多个线程访问。...假设线程A执行完calendar.setTime(date),把时间设置成2019-01-02,这时候被挂起,线程B获得CPU执行权。...("yyyy-MM-dd HH:mm:ss"); return sdf.parse(strDate);} 如上代码,仅在需要用到的地方创建一个新的实例,就没有线程安全问题,不过也加重了创建对象的负担...复仇者联盟与IntelliJ IDEA也很配哦 号外:最近整理了之前编写的一系列内容做成了PDF,关注我并回复相应口令获取: - 001 :领取《Spring Boot基础教程》 - 002 :领取《Spring
作为一名互联网小白,写博客一方面是为了记录自己的学习历程,一方面是希望能够帮助到很多和自己一样处于起步阶段的萌新。由于水平有限,博客中难免会有一些错误,有纰漏之处恳请各位大佬不吝赐教!...例如我在浏览器上的url上输入https://timor.tech/api/holiday/info/2019-01-01 然后就可以看到在页面上返回如下的结果: ?...好吧,背景确实就是黑的,但不感觉结果没了吗? ? 行吧,那我试试昨天给大伙展示的Kettle程序 ? ?...那还等啥,直接改JS代码 // 初始化日期 var initDate = "2019-01-01"; // 变量N 天(编号) var add = 1; // 设置日期的格式 var simpleDateFormat...// 日期+1 calendar.add(java.util.Calendar.DAY_OF_MONTH,DayNum); // 最新的时间: 例如 2000-01-02 /* 2.
,毕竟他代表了国际通用的日期时间格式,找了一些旧的标准原则,虽然不是最新的,但是原则上,应该比较相近,只是大概了解下,如果要精确的标准定义,建议还是找最新的文档, 日期和时间值按从最大到最小的时间单位排序...如果没有指定与UTC关系则假定是本地时间,为安全的跨时区通讯,应制定与UTC关系。若时间是UTC则在时间后面加Z表示,如“09:30UTC”表示为09:30Z”或“0930Z”。...、世界统一时间),是经过平均太阳时(以格林威治时间GMT为准)、地轴运动修正后的新时标以及以「秒」为单位的国际原子时所综合精算而成的时间,计算过程相当严谨精密,因此若以「世界标准时间」的角度来说,UTC...所以基本上UTC的本质强调的是比GMT更为精确的世界时间标准,不过对于现行表款来说,GMT与UTC的功能与精确度是没有差别的。...www.joda.org/joda-time/),其默认格式就是ISO8601,可以直接用DateTime,当然还可以使用日期格式串解析,他还支持其他一些日期时间的便捷操作,另外像Apache-DateUtils
Java.lang.StringBuffer代表 可变的字符序列 即,可以动态的拼接String 而不会开辟新的空间消耗内存! 很多方法与String相同,作为参数传递时,方法内部可以改变值。...字符数组,但不是常量数组长度可以动态改变的 默认长度16 StringBuffer(int size) 构造指定容量的字符串缓冲区 StringBuffer(String str) 将内容初始化为指定字符串内容...java.text.SimpleDateFormat; import java.util.Date; /** * SimpleDateFormat类: * Date类的格式化 —— 解析...-02-18T15:42:18.797 //解析:字符串 -->日期 TemporalAccessor parse = formatter.parse("2019-02-...-02-18 03:52:09 //解析 TemporalAccessor accessor = formatter3.parse("2019-02-18 03:52:
对于非线程安全这个问题也有解决方案: 方案一:把SimpleDateFormat实例封闭在方法中,也就是调用的时候才创建,这样虽然导致了资源浪费,但是可以避免并发问题。...// 某个时刻的输出如下 2019-01-03 23:32:05 Thu Jan 03 23:32:05 CST 2019 2019-01-03 对于Java旧有的日期时间类,SimpleDateFormat...从理论上来看,如果能够熟练使用上面分析过的规则,那么可以格式化或者反向解析任意格式的日期时间或者字符串。...DateTimeFormatter类型,那么必定是一个新的实例。...2019年01月05日 16时28分01秒 2019年01月05日 16时28分01秒 字符串反解析为日期时间类型的(parse)方法并不存在于DateTimeFormatter类中,parse方法存在于日期时间类自身之中
主要是用它进行时间的格式化输出和解析,挺方便快捷的,但是SimpleDateFormat并不是一个线程安全的类。在多线程情况下,会出现异常,想必有经验的小伙伴也遇到过。...因为我们声明SimpleDateFormat为static变量,那么它的Calendar变量也就是一个共享变量,可以被多个线程访问。...假设线程A执行完calendar.setTime(date),把时间设置成2019-01-02,这时候被挂起,线程B获得CPU执行权。...解决方案 只在需要的时候创建新实例,不用static修饰 public static String formatDate(Date date) throws ParseException { SimpleDateFormat...HH:mm:ss"); return sdf.parse(strDate); } 如上代码,仅在需要用到的地方创建一个新的实例,就没有线程安全问题,不过也加重了创建对象的负担,会频繁地创建和销毁对象
//用给定的模式和默认语言环境的日期格式符号创建SimpleDateFormat对象 SimpleDateFormat sdf = new SimpleDateFormat(pattern...parse() 解析,按照指定的格式,从String对象转换为Date对象。...System 类 ① currentTimeMillis() 获取系统时间与时间原点之间的毫秒插值。...StringBuilder 类 ① 它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。 StringBuilder会自动维护数组的扩容。...基本类型与字符串之间的转换 除了Character类之外,其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的基本类型 * 【Byte】 parseByte(String s)
22 检测发现设置为密码永不过期的用户 通常来说我们会把一个服务账户的密码设置为永不过期,但不会对用户密码这么做。另外将域内管理员类的用户的密码设置为永不过期也是不正常的。...UAC值以及新的UAC值进行过滤。...我们寻找以下的新旧 UAC 值组合: 旧 UAC 值: 0x10 -> 新 UAC 值: 0x210 旧 UAC 值: 0x11 -> 新 UAC 值: 0x210 旧 UAC 值: 0x15...用例 6:向一个已知的动态域名解析服务发起请求 在此用例中,我们要通过一个已知动态域名解析服务列表与所有A记录查询请求进行比对,一个列表例子 https://gist.githubusercontent.com...你可以看到的是,所有与本地回环地址的 3389 的通信都被记录下来了。 另一个细节是,通过 ssh 隧道登陆时,失败的登陆事件(事件 id 4625)将不会被记录下来。
主要是用它进行时间的格式化输出和解析,挺方便快捷的,但是SimpleDateFormat并不是一个线程安全的类。在多线程情况下,会出现异常,想必有经验的小伙伴也遇到过。...因为我们声明SimpleDateFormat为static变量,那么它的Calendar变量也就是一个共享变量,可以被多个线程访问。...假设线程A执行完calendar.setTime(date),把时间设置成2019-01-02,这时候被挂起,线程B获得CPU执行权。...sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.parse(strDate); } 如上代码,仅在需要用到的地方创建一个新的实例...OK,现在是不是可以对你项目里的日期工具类进行一波优化了呢?
主要是用它进行时间的格式化输出和解析,挺方便快捷的,但是SimpleDateFormat并不是一个线程安全的类。在多线程情况下,会出现异常,想必有经验的小伙伴也遇到过。...因为我们声明SimpleDateFormat为static变量,那么它的Calendar变量也就是一个共享变量,可以被多个线程访问。...假设线程A执行完calendar.setTime(date),把时间设置成2019-01-02,这时候被挂起,线程B获得CPU执行权。...线程B也执行到了calendar.setTime(date),把时间设置为2019-01-03。...sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.parse(strDate); } 如上代码,仅在需要用到的地方创建一个新的实例
SimpleDateFormat是Java提供的一个格式化和解析日期的工具类,日常开发中应该经常会用到,但是由于它是线程不安全的,多线程公用一个SimpleDateFormat实例对日期进行解析或者格式化会导致程序出错...CalendarBuilder的实例calb中; 2、使用calb中解析好的日期数据设置calendar; 3、重置日期对象cal的属性值; 4、使用calb中中属性设置cal; 5、返回设置好的cal...第一种方式: 每次使用时候new一个SimpleDateFormat的实例,这样可以保证每个实例使用自己的Calendar实例,但是每次使用都需要new一个对象,并且使用后由于没有其它引用,就会需要被回收...使用新的API,整个转换过程都不需要考虑线程安全的问题。...SimpleDateFormat这个类不是线程安全的,在使用的时候稍不注意,就会产生致命的问题。Date这个类,是可以重新设置时间的,这对于一些类内部的属性来说,是非常不安全的。
通过阅读本篇文章你将了解到: 为什么需要LocalDate、LocalTime、LocalDateTime【java8新提供的类】; java8新的时间API的使用方式,包括创建、格式化、解析、计算、...# 为什么需要LocalDate、LocalTime、LocalDateTime 1.Date如果不格式化,打印出的日期可读性差 Tue Sep 10 09:34:04 CST 2019 2.使用SimpleDateFormat...、日 时间计算 比如有些时候想知道这个月的最后一天是几号、下个周末是几号,通过提供的时间和日期API可以很快得到答案 LocalDate localDate = LocalDate.now();LocalDate...,可以通过DateTimeFormatter的ofPattern方法创建自定义格式化方式 解析时间 LocalDate localDate1 = LocalDate.parse("20190910",...•001:《Java并发与高并发解决方案》学习笔记;•002:《深入JVM内核——原理、诊断与优化》学习笔记;•003:《Java面试宝典》•004:《Docker开源书》•005:《Kubernetes
通过阅读本篇文章你将了解到: 为什么需要LocalDate、LocalTime、LocalDateTime【java8新提供的类】 java8新的时间API的使用方式,包括创建、格式化、解析、计算、修改...为什么需要LocalDate、LocalTime、LocalDateTime Date如果不格式化,打印出的日期可读性差 Tue Sep 10 09:34:04 CST 2019 使用SimpleDateFormat...对时间进行格式化,但SimpleDateFormat是线程不安全的 SimpleDateFormat的format方法最终调用代码: private StringBuffer format(Date date...、日 时间计算 比如有些时候想知道这个月的最后一天是几号、下个周末是几号,通过提供的时间和日期API可以很快得到答案。...,可以通过DateTimeFormatter的ofPattern方法创建自定义格式化方式。
,提供了几个新的类,用于操作时间和日期,它们分别是:LocalTime、LocalDateTime、Instant,都位于 java.time 包下。...:2019-08-16 21:46:22 SimpleDateFormat 构造参数的含义,请参考以下表格信息: 字符 含义 示例 y 年 yyyy-1996 M 月 MM-07 d 月中的天数 dd-...02 D 年中的天数 121 E 星期几 星期四 H 小时数(0-23) HH-23 h 小时数(1-12) hh-11 m 分钟数 mm-02 s 秒数 ss-03 Z 时区 +0800 使用示例:...因为查看 SimpleDateFormat 的源码可以得知,所有的格式化和解析,都需要通过一个中间对象进行转换,这个中间对象就是 Calendar,这样的话就造成非线程安全。...,提供了多线程下的线程安全和易用性,让我们可以更好的操作时间。
领取专属 10元无门槛券
手把手带您无忧上云