java.text.SimpleDat...

Java核心类库 - 时间Date和Calendar
-------------
新增文件夹...
新增文件夹
(多个标签用逗号分隔)
1)java中的时间类有:Date和Calendar
2)java中时间类的本质 long(毫秒数)
&&Date = long +历法算法(方法gerYear())
&&Calendar = long +历法算法(方法ger())
3) 时间的标准有两种
&(1970)GMT long
&(0)UTC long
4) java中基本的时间表示GMT long
5) java提供了Date类型表示时间和日期
&Date 是long 类型的包装
6) Calendar 是历法的抽象
&历法:公历,农历,太阳历
7) GregorianCalendar是历法的实现,采用公历的算法实现的
&Calendar cal = Calendar.getInstance();
&Calendar cal = new GregorianCalendar();//除了日本和泰国,效果等同于上一句
8) Date和 Calendar的默认值就是系统当前时间
一&java中表示时间的方式:
1) 格林威治时间(GMT):日 00:00:00(注:中国是东八区,所以要+8个小时)
  也就是日 08:00:00
2 )公元元年(UTC): 0年
3 )目前java中3种日期表达方式long, Date , Calendar都在用
import java.util.C
import java.util.D
import java.util.GregorianC
public class LongDateDemo {
public static void main(String[] args) {
long now = System.currentTimeMillis();
long year = now//24/365 +1970;
System.out.println(year);
//一年 地球绕太阳一圈(365天+1/4天)
//原点(公元元年)
/* date.getYear()是将date内部的long时间,根据历法计算
* 为年份,返回值是2位数年份,如:1997年返回97,但是过了
* 2K年,返回3位数年份,如2012返回112
Date date = new Date();//默认是当前时间(long)
int y = date.getYear()+1900;
int month = date.getMonth()+1;
System.out.println(y+"年"+month+"月");
//Calendar 历法
Calendar cal = new GregorianCalendar();//默认是当前时间(long)
y = cal.get(Calendar.YEAR);//2012
month = cal.get(Calendar.MONTH)+1;//4
System.out.println(y+"年"+month+"月");
}二&时间类型转换& long &-& Date &-& Calendar
&long ---&Date&:& dat = new Date(l)
&&&&&& dat.setTime(l)
&Date ---&Calendar&: cal.setTime(dat)
&Calendar ---& Date: cal.getTime()
&Date ---& long :dat.getTime()
&注:Date dat&&,&&long l& ,Calendar cal
import java.util.C
import java.util.D
import java.util.GregorianC
* 时间的类型转换
public class DateCaseDemo {
public static void main(String[] args) {
long gmt = 0;//格林威治时间
Date date = new Date();
date.setTime(gmt);//回到1970 元旦,相当于long --&Date
System.out.println(date.getYear()+1900);//1970
Calendar cal = new GregorianCalendar();
//date --& cal
cal.setTime(date);//将cal设置为date的时间,也是1970
System.out.println(cal.get(Calendar.YEAR));//1970
//date 和 cal ,gmt 代表同一时刻
//加-1天,是在当前时间上加-1天,就是减少1天,就是减少1天的毫秒数(*24)
cal.add(Calendar.DAY_OF_YEAR,-1);
Date d = cal.getTime();
System.out.println(d);//1969
long l = d.getTime();
System.out.println(l);//-,因为是在原点以前的时间
三&时间的输入与输出
1)& 日期输出的本质是将Date转换为格式化的String
2)& 日期输入的本质是将格式化的 String转换为 Date
3)& SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
&  构建SimpleDateFormat 一般提供日期的格式"yyyy-MM-dd"具体参看javadoc
&  &如:"yyyy-MM-dd HH:mm:ss"
&  &&"yyyyMMdd"
&  &&"dd/MM/yy"
  &&&"MM/dd/yyyy"
&fmt.parse(String)&&& 可以实现将(合法)字符串解析为日期类型,经常用于处理日期输入
&fmt.format(Date)&&&& 可以把日期格式化为字符串用于输出处理
使用字符串String输出时间
&Date ---& String:
&&DateFormat fmt = new SimpleDateFormat("HH:mm:ss");
&&fmt.format(date)
把字符串String时间转为Date时间(个是必须相同)
&String --& Date :
&&DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
&&fmt.parse("")
注:java没有提供String直接转换为Calendar的API方法,但第三方提供的API有这种方法
&如果Calendar需要转为String,必须先转换为Date
&Calendar ----& Date :
&&Date dat = cal.getTime();
import java.text.ParseE
import java.text.SimpleDateF
import java.util.D
public class DateIODemo {
public static void main(String[] args) throws ParseException {
Date date = new Date();//当前时间,当前毫秒数
//输出yyyy-MM-dd HH:mm:ss
SimpleDateFormat fmt =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//将日期类型格式化为时间字符串
String str = fmt.format(date);//日期格式化
System.out.println(str);// 00:00:00
//解析日期字符串为日期类型对象
String day = "";
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
Date d = f.parse(day);//将日期字符串解析为毫秒数
long l = d.getTime();
System.out.println(fmt.format(d));
String s = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
System.out.println(s);//
四 时间的计算
&时间计算的问题
&1) 本质是时间毫秒数的计算
&2) 简单时间计算,直接计算毫秒数,如:3天以后,2小时等
&3) 复杂时间计算,利用Calender类提供的历法算法实现
常用方法:
&&&& add()&set()
& && Calendar 提供的方法本是上也是计算毫秒数,
import java.text.SimpleDateF
import java.util.C
import java.util.D
import java.util.GregorianC
public class DateCalDemo {
public static void main(String[] args) {
//简单时间计算
long l = System.currentTimeMillis();//当前时间
l += *24*3;//3天以后
SimpleDateFormat sdm = new SimpleDateFormat("yyyy-MM-dd");
String s = sdm.format(new Date(l));
System.out.println(s);
//复杂时间计算
Calendar cal = new GregorianCalendar();
cal.add(Calendar.YEAR, 2);//2年以后
cal.set(Calendar.MONTH,Calendar.JANUARY);//设置月份为1月
System.out.println(sdm.format(cal.getTime()));//2年以后的1月
package com.tarena.day16;
import java.util.C
import java.util.D
public class SpecialDateDemo {
public static void main(String[] args) {
* 计算商品的促销日期special Date,规则:商品过期前两周五促销 
* @param creat
* @param months
public static Date special(Date creat,int months){
Calendar cal = Calendar.getInstance();
cal.setTime(creat); //生产日期
cal.add(Calendar.MONTH, months);  //过期日
cal.add(Calendar.WEEK_OF_YEAR, -2);  //回调2周
if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){//如果是星期天
cal.add(Calendar.WEEK_OF_YEAR, -1);//回调一周
cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);//调到本周的周五
return cal.getTime();
转自:/hqr9313/archive//2458221.html
相关资讯  — 
相关文档  — 
发布时间: 08:32:58
同类热门经验
34545次浏览
27248次浏览
22773次浏览
26750次浏览
20768次浏览
25608次浏览
OPEN-OPEN, all rights reserved.当前访客身份:游客 [
努力是成功的基础
:引用来自“简单代码”的评论 为什么不用maven? ...
:为什么不用maven?
今日访问:0
昨日访问:3
本周访问:58
本月访问:97
所有访问:872
long类型转换成日期
发表于10个月前( 11:57)&&
阅读(878)&|&评论()
0人收藏此文章,
long类型转换成日期,此文章提供了几种不同的日期格式,希望可以帮助有需要的朋友。yyyy-MM-dd HH:mm:ss,yyyyMMddHHmmss,yyyy.MM.dd,yyyyMMdd,yyyy.MM.dd
package com.xcfh.import java.sql.Dimport java.text.SimpleDateF/**&* @Description: long转成时间&* &*
PineTree&*
2.0&* &*/public class LongToDate {&& &&& &/**&& & * @Description: String类型毫秒数转换成日期&& & * && & *
lo 毫秒数&& & * @return String yyyy-MM-dd HH:mm:ss&& & */&& &public static String stringToDate(String lo){&& &&& &long time = Long.parseLong(lo);&& &&& &Date date = new Date(time);&& &&& &SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");&& &&& &return sd.format(date);&& &}&& &&& &/**&& & * @Description: long类型转换成日期&& & * && & * @param lo 毫秒数&& & * @return String yyyy-MM-dd HH:mm:ss&& & */&& &public static String longToDate(long lo){&& &&& &Date date = new Date(lo);&& &&& &SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");&& &&& &return sd.format(date);&& &}&& &&& &/**&& & * @Description: long类型生成没有符号的日期格式&& & *&& & * @param lo 日期毫秒数&& & * @return String yyyyMMddHHmmss&& & */&& &public static String getLongToDate(long lo){&& &&& &Date date = new Date(lo);&& &&& &SimpleDateFormat sd = new SimpleDateFormat("yyyyMMddHHmmss");&& &&& &return sd.format(date);&& &}&& &&& &/**&& & * @Description: String类型生成没有符号的日期格式&& & * && & * @param lo 日期毫秒数(字符串形式)&& & * @return String yyyyMMddHHmmss&& & */&& &public static String getStringToDate(String lo){&& &&& &long time = Long.parseLong(lo);&& &&& &Date date = new Date(time);&& &&& &SimpleDateFormat sd = new SimpleDateFormat("yyyyMMddHHmmss");&& &&& &return sd.format(date);&& &}&& &&& &/**&& & * @Description: long类型转换成点形式的日期格式&& & * && & * @param lo 日期毫秒数&& & * @return String yyyy.MM.dd&& & */&& &public static String getLongPointDate(long lo){&& &&& &Date date = new Date(lo);&& &&& &SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd");&& &&& &return sd.format(date);&& &}&& &&& &/**&& & * @Description: String类型转换成点形式的日期格式&& & * && & * @param lo String类型日期毫秒数&& & * @return String yyyy.MM.dd&& & */&& &public static String getStringPointDate(String lo){&& &&& &long time = Long.parseLong(lo);&& &&& &Date date = new Date(time);&& &&& &SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd");&& &&& &return sd.format(date);&& &}&& &&& &/**&& & * @Description: long类型转成日期格式&& & * && & * @param lo long类型日期好藐视&& & * @return String yyyyMMdd&& & */&& &public static String getloToDate(long lo){&& &&& &Date date = new Date(lo);&& &&& &SimpleDateFormat sd = new SimpleDateFormat("yyyyMMdd");&& &&& &return sd.format(date);&& &}&& &&& &/**&& & * @Description: String类型转成日期格式&& & * && & * @param lo String类型日期好藐视&& & * @return String yyyyMMdd&& & */&& &public static String getStrToDate(String lo){&& &&& &long time = Long.parseLong(lo);&& &&& &Date date = new Date(time);&& &&& &SimpleDateFormat sd = new SimpleDateFormat("yyyyMMdd");&& &&& &return sd.format(date);&& &}&& &&& &/**&& & * @Description: long类型转换成点形式的日期格式&& & * && & * @param lo 日期毫秒数&& & * @return String yyyy.MM.dd& HH:mm:ss&& & */&& &public static String longPointDate(long lo){&& &&& &Date date = new Date(lo);&& &&& &SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");&& &&& &return sd.format(date);&& &}&& &&& &/**&& & * @Description: String类型转换成点形式的日期格式&& & * && & * @param lo String类型日期毫秒数&& & * @return String yyyy.MM.dd HH:mm:ss&& & */&& &public static String stringPointDate(String lo){&& &&& &long time = Long.parseLong(lo);&& &&& &Date date = new Date(time);&& &&& &SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");&& &&& &return sd.format(date);&& &}}
更多开发者职位上
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读  想必大家对SimpleDateFormat并不陌生。SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题。下面我们通过一个具体的场景来一步步的深入学习和理解SimpleDateFormat类。
  一.引子  我们都是优秀的程序员,我们都知道在程序中我们应当尽量少的创建SimpleDateFormat 实例,因为创建这么一个实例需要耗费很大的代价。在一个读取数据库数据导出到excel文件的例子当中,每次处理一个时间信息的时候,就需要创建一个SimpleDateFormat实例对象,然后再丢弃这个对象。大量的对象就这样被创建出来,占用大量的内存和 jvm空间。代码如下:
package com.peidasoft.
import java.text.ParseE
import java.text.SimpleDateF
import java.util.D
public class DateUtil {
public static
String formatDate(Date date)throws ParseException{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(date);
public static Date parse(String strDate) throws ParseException{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.parse(strDate);
  你也许会说,OK,那我就创建一个静态的simpleDateFormat实例,然后放到一个DateUtil类(如下)中,在使用时直接使用这个实例进行操作,这样问题就解决了。改进后的代码如下:
package com.peidasoft.
import java.text.ParseE
import java.text.SimpleDateF
import java.util.D
public class DateUtil {
private static final
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static
String formatDate(Date date)throws ParseException{
return sdf.format(date);
public static Date parse(String strDate) throws ParseException{
return sdf.parse(strDate);
  当然,这个方法的确很不错,在大部分的时间里面都会工作得很好。但当你在生产环境中使用一段时间之后,你就会发现这么一个事实:它不是线程安全的。在正常的测试情况之下,都没有问题,但一旦在生产环境中一定负载情况下时,这个问题就出来了。他会出现各种不同的情况,比如转化的时间不正确,比如报错,比如线程被挂死等等。我们看下面的测试用例,那事实说话:
package com.peidasoft.
import java.text.ParseE
import java.text.SimpleDateF
import java.util.D
public class DateUtil {
private static final
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static
String formatDate(Date date)throws ParseException{
return sdf.format(date);
public static Date parse(String strDate) throws ParseException{
return sdf.parse(strDate);
package com.peidasoft.
import java.text.ParseE
import java.util.D
public class DateUtilTest {
public static class TestSimpleDateFormatThreadSafe extends Thread {
public void run() {
while(true) {
this.join(2000);
} catch (InterruptedException e1) {
e1.printStackTrace();
System.out.println(this.getName()+":"+DateUtil.parse(" 06:02:20"));
} catch (ParseException e) {
e.printStackTrace();
public static void main(String[] args) {
for(int i = 0; i & 3; i++){
new TestSimpleDateFormatThreadSafe().start();
  执行输出如下:
Exception in thread "Thread-1" java.lang.NumberFormatException: multiple points
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1082)
at java.lang.Double.parseDouble(Double.java:510)
at java.text.DigitList.getDouble(DigitList.java:151)
at java.text.DecimalFormat.parse(DecimalFormat.java:1302)
at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1589)
at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1311)
at java.text.DateFormat.parse(DateFormat.java:335)
at com.peidasoft.orm.dateformat.DateNoStaticUtil.parse(DateNoStaticUtil.java:17)
at com.peidasoft.orm.dateformat.DateUtilTest$TestSimpleDateFormatThreadSafe.run(DateUtilTest.java:20)
Exception in thread "Thread-0" java.lang.NumberFormatException: multiple points
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1082)
at java.lang.Double.parseDouble(Double.java:510)
at java.text.DigitList.getDouble(DigitList.java:151)
at java.text.DecimalFormat.parse(DecimalFormat.java:1302)
at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1589)
at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1311)
at java.text.DateFormat.parse(DateFormat.java:335)
at com.peidasoft.orm.dateformat.DateNoStaticUtil.parse(DateNoStaticUtil.java:17)
at com.peidasoft.orm.dateformat.DateUtilTest$TestSimpleDateFormatThreadSafe.run(DateUtilTest.java:20)
Thread-2:Mon May 24 06:02:20 CST 2021
Thread-2:Fri May 24 06:02:20 CST 2013
Thread-2:Fri May 24 06:02:20 CST 2013
Thread-2:Fri May 24 06:02:20 CST 2013
  说明:Thread-1和Thread-0报java.lang.NumberFormatException: multiple points错误,直接挂死,没起来;Thread-2 虽然没有挂死,但输出的时间是有错误的,比如我们输入的时间是: 06:02:20 ,当会输出:Mon May 24 06:02:20 CST 2021 这样的灵异事件。
  二.原因
  作为一个专业程序员,我们当然都知道,相比于共享一个变量的开销要比每次创建一个新变量要小很多。上面的优化过的静态的SimpleDateFormat版,之所在并发情况下回出现各种灵异错误,是因为SimpleDateFormat和DateFormat类不是线程安全的。我们之所以忽视线程安全的问题,是因为从SimpleDateFormat和DateFormat类提供给我们的接口上来看,实在让人看不出它与线程安全有何相干。只是在JDK文档的最下面有如下说明:
  SimpleDateFormat中的日期格式不是同步的。推荐(建议)为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,则它必须保持外部同步。
  JDK原始文档如下:  Synchronization:  Date formats are not synchronized.   It is recommended to create separate format instances for each thread.   If multiple threads access a format concurrently, it must be synchronized externally.
  下面我们通过看JDK源码来看看为什么SimpleDateFormat和DateFormat类不是线程安全的真正原因:
  SimpleDateFormat继承了DateFormat,在DateFormat中定义了一个protected属性的 Calendar类的对象:calendar。只是因为Calendar累的概念复杂,牵扯到时区与本地化等等,Jdk的实现中使用了成员变量来传递参数,这就造成在多线程的时候会出现错误。
  在format方法里,有这样一段代码:
private StringBuffer format(Date date, StringBuffer toAppendTo,
FieldDelegate delegate) {
// Convert input date to time field list
calendar.setTime(date);
boolean useDateFormatSymbols = useDateFormatSymbols();
for (int i = 0; i & compiledPattern. ) {
int tag = compiledPattern[i] &&& 8;
int count = compiledPattern[i++] & 0xff;
if (count == 255) {
count = compiledPattern[i++] && 16;
count |= compiledPattern[i++];
switch (tag) {
case TAG_QUOTE_ASCII_CHAR:
toAppendTo.append((char)count);
case TAG_QUOTE_CHARS:
toAppendTo.append(compiledPattern, i, count);
subFormat(tag, count, delegate, toAppendTo, useDateFormatSymbols);
return toAppendTo;
  calendar.setTime(date)这条语句改变了calendar,稍后,calendar还会用到(在subFormat方法里),而这就是引发问题的根源。想象一下,在一个多线程环境下,有两个线程持有了同一个SimpleDateFormat的实例,分别调用format方法:  线程1调用format方法,改变了calendar这个字段。  中断来了。  线程2开始执行,它也改变了calendar。  又中断了。  线程1回来了,此时,calendar已然不是它所设的值,而是走上了线程2设计的道路。如果多个线程同时争抢calendar对象,则会出现各种问题,时间不对,线程挂死等等。  分析一下format的实现,我们不难发现,用到成员变量calendar,唯一的好处,就是在调用subFormat时,少了一个参数,却带来了这许多的问题。其实,只要在这里用一个局部变量,一路传递下去,所有问题都将迎刃而解。  这个问题背后隐藏着一个更为重要的问题--无状态:无状态方法的好处之一,就是它在各种环境下,都可以安全的调用。衡量一个方法是否是有状态的,就看它是否改动了其它的东西,比如全局变量,比如实例的字段。format方法在运行过程中改动了SimpleDateFormat的calendar字段,所以,它是有状态的。
  这也同时提醒我们在开发和设计系统的时候注意下一下三点:
  1.自己写公用类的时候,要对多线程调用情况下的后果在注释里进行明确说明
  2.对线程环境下,对每一个共享的可变变量都要注意其线程安全性
  3.我们的类和方法在做设计的时候,要尽量设计成无状态的
  三.解决办法
  1.需要的时候创建新实例:
package com.peidasoft.
import java.text.ParseE
import java.text.SimpleDateF
import java.util.D
public class DateUtil {
public static
String formatDate(Date date)throws ParseException{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(date);
public static Date parse(String strDate) throws ParseException{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.parse(strDate);
  说明:在需要用到SimpleDateFormat 的地方新建一个实例,不管什么时候,将有线程安全问题的对象由共享变为局部私有都能避免多线程问题,不过也加重了创建对象的负担。在一般情况下,这样其实对性能影响比不是很明显的。
  2.使用同步:同步SimpleDateFormat对象
package com.peidasoft.
import java.text.ParseE
import java.text.SimpleDateF
import java.util.D
public class DateSyncUtil {
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static String formatDate(Date date)throws ParseException{
synchronized(sdf){
return sdf.format(date);
public static Date parse(String strDate) throws ParseException{
synchronized(sdf){
return sdf.parse(strDate);
  说明:当线程较多时,当一个线程调用该方法时,其他想要调用此方法的线程就要block,多线程并发量大的时候会对性能有一定的影响。
  3.使用ThreadLocal: 
package com.peidasoft.
import java.text.DateF
import java.text.ParseE
import java.text.SimpleDateF
import java.util.D
public class ConcurrentDateUtil {
private static ThreadLocal&DateFormat& threadLocal = new ThreadLocal&DateFormat&() {
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static Date parse(String dateStr) throws ParseException {
return threadLocal.get().parse(dateStr);
public static String format(Date date) {
return threadLocal.get().format(date);
  另外一种写法:
package com.peidasoft.
import java.text.DateF
import java.text.ParseE
import java.text.SimpleDateF
import java.util.D
public class ThreadLocalDateUtil {
private static final String date_format = "yyyy-MM-dd HH:mm:ss";
private static ThreadLocal&DateFormat& threadLocal = new ThreadLocal&DateFormat&();
public static DateFormat getDateFormat()
DateFormat df = threadLocal.get();
if(df==null){
df = new SimpleDateFormat(date_format);
threadLocal.set(df);
public static String formatDate(Date date) throws ParseException {
return getDateFormat().format(date);
public static Date parse(String strDate) throws ParseException {
return getDateFormat().parse(strDate);
  说明:使用ThreadLocal, 也是将共享变量变为独享,线程独享肯定能比方法独享在并发环境中能减少不少创建对象的开销。如果对性能要求比较高的情况下,一般推荐使用这种方法。
  4.抛弃JDK,使用其他类库中的时间格式化类:
  1.使用Apache commons 里的FastDateFormat,宣称是既快又线程安全的SimpleDateFormat, 可惜它只能对日期进行format, 不能对日期串进行解析。
  2.使用Joda-Time类库来处理时间相关问题
  做一个简单的压力测试,方法一最慢,方法三最快,但是就算是最慢的方法一性能也不差,一般系统方法一和方法二就可以满足,所以说在这个点很难成为你系统的瓶颈所在。从简单的角度来说,建议使用方法一或者方法二,如果在必要的时候,追求那么一点性能提升的话,可以考虑用方法三,用ThreadLocal做缓存。
  Joda-Time类库对时间处理方式比较完美,建议使用。
  参考资料:
  2.http://www.blogjava.net/killme2008/archive//354062.html
阅读(...) 评论()}

我要回帖

更多关于 java.text.format 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信