想必大家对SimpleDateFormat并不陌生。SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题。下面我们通过一个具体的场景来一步步的深入学习和理解SimpleDateFormat类。
日常开发中,我们经常需要使用时间相关类,说到时间相关类,想必大家对SimpleDateFormat并不陌生。主要是用它进行时间的格式化输出和解析,挺方便快捷的,但是SimpleDateFormat并不是一个线程安全的类。在多线程情况下,会出现异常,想必有经验的小伙伴也遇到过。下面我们就来分析分析SimpleDateFormat为什么不安全?是怎么引发的?以及多线程下有那些SimpleDateFormat的解决方案?
在开发中我们常要使用到日期格式的转换或者是计算两个时间的间距,因此很有必要自己封装一个通用的工具类方便自己以后调用使用,方便自己的开发,也可使项目更简洁。
【强制】SimpleDateFormat 是线程不安全的类,一般不要定义为 static 变量,如果定义为 static,必须加锁,或者使用 DateUtils 工具类。
我们可以用java.text.SimpleDateFormat类完成日期的转换和格式化操作,如:
想必程序员在开发过程中,遇到日期转化肯定避免不了的。它让人爱恨不已,而有些又记不住,每次遇到都得问度娘。我最近在开发过程中亦是如此。
日期处理是开发过程中经常遇到的问题,以下是总结了开发中常用的方法,代码如下: import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * * @项目名 ssh * @功能 处理日期的工具类 * @类名 DateUtils * @作者 Java自学通 * @日期 Aug 30, 20113:35:30 PM * @版本 1.
package com.wazn.learn.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; /** * ͨ���� * * @author root */ public class DateUt
异常应该尽量提前避免,但是无法做到绝对避免,异常的可能情况太多,开发中只能提前干预。
import java.text.ParseException; import java.util.Calendar; public class DateDemo { public static void main(String [] args) throws ParseException { Calendar c = Calendar.getInstance(); int year =c.get(Calendar.YEAR); int month =c.get(Calendar.MONTH)+1; int day =c.get(Calendar.DAY_OF_MONTH); int week =c.get(Calendar.DAY_OF_WEEK); System.out.println(year+"年 ,"+month+"月,"+day+"日,"+"星期"+week); }
1:异常(理解) (1)程序出现的不正常的情况。 (2)异常的体系 Throwable |--Error 严重问题,我们不处理。 |--Exception |--RuntimeException 运行期异常,我们需要修正代码 |--非RuntimeException 编译期异常,必须处理的,否则程序编译不通过 package cn.itcast_01; /* * 异常:程序出现了不正常的情况。 * * 举例:今天天气很好,班长出去旅游。骑着自行车,去山里面呼吸新鲜空气。 * 问题1
Date date = DateUtils.parseDate(strDate, “yyyy-MM-dd”,”yyyy-MM-dd HH:mm:ss”,”yyyy/MM/dd”,”yyyy/MM/dd HH:mm:ss”);
版权声明: https://blog.csdn.net/li_xunhuan/article/details/89041674
java常用工具类:时间戳与时间相互转换,需要的拿走! package com.lcry.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * 时间戳与时间相互转换工具类 * Created on 2018/12/24. * * @author lcry */ public class DateAndStampUtil { /*
一、异常概述 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出 java.lang.ArithmeticException 的异常。 异常发生的原因有很多,通常包含以下几大类: 用户输入了非法数据。 要打开的文件不存在。 网络通信时连接中断,或者JVM内存溢出。 这些异常有的是因为用
结果示意图: A:DateFormat类的概述 * DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。是抽象类,所以使用其子类SimpleDat
试想一个问题:如果我们已知Java对象的toString格式,想要获取其json格式或者其Java对象,该如何做呢?
我们在开发的过程中,有的时候需要转换一些自定义类型,此时默认的映射方式可能无法满足需要。
json转map,map转对象…… 话不多说,直接上代码 import java.lang.reflect.Method; import java.text.ParseException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; /** * * 1:将JavaBean转换成Ma
今天给大家推荐一个不错的开源项目代码,作者利用反射机制实现了数据库的 ORM 框架。希望大家读了之后能够从中学习作者的思路和思想。再重复一遍,学习一下作者的思路和思想,是学习思想!也欢迎大家去 Git
异常:异常就是Java程序在运行过程中出现的错误。 异常由来:问题也是现实生活中一个具体事务,也可以通过java的类的形式进行描述,并封装成对象。其实就是Java对不正常情况进行描述后的对象体现。 我们见过的异常,角标越界异常,空指针异常
直接一个类实现。不用再建个对象来存储。支持String,Date ,LocalDate。
import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner;
之前有一篇关于将UTC时间转换成北京时间的python文章(传送门),这次需要用到java版的,本以为这种小工具网上会很多,但是在网上搜了一圈之后发现都不尽人意。
目录 1 工具类 2 实现 1 工具类 public static List<Map<String,Object>> getCycleList(int cycleNum, String startTime, String endTime) throws ParseException, ParseException { System.out.println("统计的时间段为:从"+startTime+"到"+endTime); Date endParse = new
java封装时间戳与时间的相互转换 public class TimeUtil { /** * 时间戳转换为时间 * @param time * @return */ public static String toDate(Long time){ Date date = new Date(); date.setTime(time); return new SimpleDateFormat("yyyy-MM
日期处理类 Date类 当前日期时间 java.util.Date import java.util.Date; public class TestDemo { public static void main(String [] args) { Date date = new Date(); System.out.println(date); } } 运行结果: Sat Jun 29 21:56:04 CST 2019 上述的结果表示的就是当前的日期时间,为国际标准的格式; 当然我们可以使
在 Java 中有多种方法可以比较日期,日期在计算机内部表示为(long型)时间点——自1970年1月1日以来经过的毫秒数。在Java中,Date是一个对象,包含多个用于比较的方法,任何比较两个日期的方法本质上都会比较日期的时间。
1. 异常 1.1 异常的概述 异常就是程序出现了不正常的情况 1.2 异常的体系结构 📷 Error:错误,严重问题,不需要处理 Exception:异常类,它表示程序本身可以处理的问题 RuntimeException:在编译期间不检查,出现问题后,需要我们回来修改代码 非 RuntimeException:编译期间就必须处理的,否则程序不能通过编译 2. JVM默认处理异常的方式 如果程序出现了问题,我们没有做任何处理,最终JVM 会做默认的处理,处理方式有如下两个步骤: 把异常的名称
摘 要 本文将介绍通过Hadoop Mapreduce实现离线统计网站每日pv的思路及代码。 前言 利用网站的kpi数据来分析出网站潜在的价值,那么了解网站的PV、UV、IP的状况,是一项必不可少的任务。本文将介绍通过Hadoop Mapreduce实现离线统计网站每日pv的思路及代码。 什么是PV pv是指页面的浏览量或点击量(Page View),用户每访问一次或刷新一下即被计算一次。 需求 对网站以往的访问数据进行日pv、月PV、年PV统计。 技术选型 对于访问量大的网站来说,普通程序计算实现成本非
使用mybatis-plus的时候出现了LocalDateTime类(jdk8 中新出现的类 那么我在反序列化的时候出了问题。 我在springboot 2.1.3 中使用以下类结局问题) 用到了下面这个类解决了所有的问题。包括前端传值过来也能直接接受字符串 百度上面也猜了许许多多的坑 最终换了一个spring boot的版本 然后用以下的代码配置完美解决了问题 import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml
ANTLR是Another Tool for Language Recognition的缩写。
工作当中需要执行 string 类型的 java code ,之前有同事用过 mvel ,调研之后发现太多于重量级了,我就想安安静静的执行一段 java 代码 然后得到返回值。后来由调研了一下 jexl3 ,相比于 mvel 用起来简单方便还能满足需求。
正则表达 初探* 走进沼泽 问题引出 问题:判断一个String字符串是否为数字字符串 将字符串转换为字符数组 判断每一个字符是否在“0~9”范围之间 public class TestDemo { public static void main(String [] args) { String str = "123" ; System.out.println(isNumber(str)); } public static boolean isNumber(String temp) {
在使用SpingMVC框架的项目中,经常会遇到页面某些数据类型是Date、Integer、Double等的数据要绑定到控制器的实体,或者控制器需要接受这些数据,如果这类数据类型不做处理的话将无法绑定。 这里我们可以使用注解@InitBinder来解决这些问题,这样SpingMVC在绑定表单之前,都会先注册这些编辑器。一般会将这些方法些在BaseController中,需要进行这类转换的控制器只需继承BaseController即可。其实Spring提供了很多的实现类,如CustomDateEd
java.util.Date提供了在Java中比较两个日期的经典方法compareTo()。
/* * 有些时候,我们是可以对异常进行处理的,但是又有些时候,我们根本就没有权限去处理某个异常。 * 或者说,我处理不了,我就不处理了。 * 为了解决出错问题,Java针对这种情况,就提供了另一种处理方案:抛出。 * * 格式: * throws 异常类名 * 注意:这个格式必须跟在方法的括号后面。 * * 注意: * 尽量不要在main方法上抛出异常(因为这样就没有意义了)。 * 但是我讲课为了方便我就这样做了(将来实际开发中是弹出页面)。 * * 小结: * 编译期异常的抛出,将来调用者必须处理。 * 运行期异常的抛出,将来调用可以不用处理,也可以处理(像处理编译期异常那样处理)。。 */
结果示意图 *A:案例演示 * 需求:算一下你来到这个世界多少天? * 分析: * 1、首先把出生日期和现在日期字符串放入变量中 * 2、创建日期格式对象 * 3、把日期字符串转换成日期对象
该工具类实现的功能有: 1.String日期转Date 2.Date日期转String 3.Date日期转LocaDate 4.LocalDate转Date 5.获取当前日期(String) 6.获取当前日期(Date) 7.获取两个日期之间的间隔 8.获取日期的星期 9.比较两个日期的大小 10.日期转为时间戳 11.时间戳转日期 12.去除日期连接符号(“-”),转为long 13.日期加上相应的天数 代码如下所示: import java.tex
你可以到:http://lucene.apache.org/ 了解更新,更全的关于lucene的信息。
解释器模式(Interpreter Pattern):定义一个语言的文法,并且建立一个解释器来解释该语言中的句子,这里的 “语言” 是指使用规定格式和语法的代码。解释器模式是一种类行为型模式。
平时写程序都习惯了使用SimpleDateFormat,当需要创建当前时间的时间戳,直接调用老套方法 SimpleDateFormat df= new SimpleDateFormat("yyyy-MM-dd"); 然后需要创建时间戳的时候,直接调用方法 df.format (new Date()) 在单线程工程中,这种方法毫无问题,但是如果在多线程高并发情景中,这种问题就可能会发生问题。因为SimpleDateFormat是线程不安全的,多线程环境下不能用。不然,可能会发生一些跟你预期不一样的结果。
领取专属 10元无门槛券
手把手带您无忧上云