SimpleDateFormat日期格式转换

来源:互联网 发布:办公软件有哪些 编辑:程序博客网 时间:2024/05/22 08:28

在08年的项目中经常遇到Calendar(日历)的转化错误,这个错误在Windows环境中不会抛错,将项目部署到Linux中就会抛异常导致功能无法使用,这里做一个总结。

1 Java.util.Date(这里讲String类型转date类型)

包含年、月、日、时、分、秒信息。

格式:Wed Jun 07 15:26:34 CST 2017

问题:

在项目中我发现经常有Date currentDate= new Date();,之后又定义了一个SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");最后在格式化Date date = DateFormat.getDateTimeInstance().parse(sdf.format(currentDate));结果Linux中就抛错了。

其实我将这个问题演练总结了一个,发现格式化是多余的,因为格式化后与新new出来的date格式是一样的,最终要的就是date格式,多此一举了。

@Testpublic void calendar(){Date currentDate= new Date();//输出:Wed Jun 07 15:40:14 CST 2017System.out.println(currentDate);try {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = DateFormat.getDateTimeInstance().parse(sdf.format(currentDate));System.out.println(date);//输出:Wed Jun 07 15:40:14 CST 2017} catch (ParseException e) {e.printStackTrace();}}

正文:在项目中经常会从前端传过来String类型的格式的日期,这个时候需要我们后台接收后进行转换一下。

一、String————>Date

1)带有时分秒的(年月日时分秒)

@Testpublic void calendar(){// String转换为Date  String dateStr="2017-06-07 23:23:23";  String pattern="yyyy-MM-dd HH:mm:ss";  SimpleDateFormat dateFormat=new SimpleDateFormat(pattern);  try {Date date=dateFormat.parse(dateStr);System.out.println(date);//输出:Wed Jun 07 23:23:23 CST 2017} catch (ParseException e) {e.printStackTrace();}  }
其中:String pattern="yyyy-MM-dd HH:mm:ss";  
   SimpleDateFormat dateFormat=new SimpleDateFormat(pattern);  
  可以合并成:SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  

2)不带时分秒的(仅有年月日的)

@Testpublic void calendar(){// String转换为Date  String dateString = "2017-06-07 ";  try{      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd ");      Date date = sdf.parse(dateString);     System.out.println(date);//输出:Wed Jun 07 00:00:00 CST 2017}catch (ParseException e){      e.getMessage();  } }

3)将带有时分秒的String 格式化成不带时分秒的Date

@Testpublic void calendar3(){// String转换为Date  String dateStr="2017-06-07 23:23:23";  String pattern="yyyy-MM-dd";  SimpleDateFormat dateFormat=new SimpleDateFormat(pattern);  try {Date date=dateFormat.parse(dateStr);System.out.println(date);//输出:Wed Jun 07 00:00:00 CST 2017} catch (ParseException e) {e.printStackTrace();}  }

考虑:若只转换时分秒呢?答案是从1970年开始的年份加秒数

@Testpublic void calendar(){// String转换为Date  String dateString = "23:24:59";  try{      SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");      Date date = sdf.parse(dateString);     System.out.println(date);//输出:Thu Jan 01 23:24:59 CST 1970}catch (ParseException e){      e.getMessage();  } }

二、Date转String 

Date——>String

1)带时分秒的格式
@Testpublic void calendar(){// Date 转换为String  Date ddate = new Date();//从数据库取出来的也一样String sdate=(new SimpleDateFormat("yyyy-MM-dd")).format(ddate);  System.out.println(sdate);//2017-06-07 16:14:17}
2)不带时分秒的只需将格式替换成"yyyy-MM-dd"即可。

Date转Date (这种的是指带有时分秒的date转成不带时分秒的Date)
Date——>Date
思路:可以先将date转成String 在将String转成不带时分秒的date
@Testpublic void calendar3(){// Date 转换为String  Date ddate = new Date();String sdate=(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(ddate);  System.out.println(sdate);//2017-06-07 16:14:17// String转换为Date  String pattern="yyyy-MM-dd";  SimpleDateFormat dateFormat=new SimpleDateFormat(pattern);  try {Date date=dateFormat.parse(sdate);System.out.println(date);//输出:Wed Jun 07 00:00:00 CST 2017} catch (ParseException e) {e.printStackTrace();}  }
也可以先将Date转成不带时分秒的String 在将String转成不带时分秒的date,这里就不做演示了

2 Java.sql.Date(略)

包含年、月、日信息。

继承自Java.util.Date。在数据库相关操作中使用,如rs.getDate,ps.setDate等。rs是指ResultSet,ps是指PreparedStatement。

// java.util.Date转换为java.sql.Date  new java.sql.Date(utilDate.getTime());// 其中utilDate为java.util.Date类型的对象  

3 Java.util.Calendar

包含年、月、日、时、分、秒、毫秒信息。

JDK1.1引入,用以代替java.util.Date。

一、Date类型转换成Calendar 

Date——>Calendar

1)带时分秒的格式

@Testpublic void calendar(){// Date转为Calendar  Date date=new Date();  Calendar calendar=Calendar.getInstance();  calendar.setTime(date);  System.out.println(calendar);}

打印输出的格式为:java.util.GregorianCalendar[time=1496823744368,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2017,MONTH=5,WEEK_OF_YEAR=23,WEEK_OF_MONTH=2,DAY_OF_MONTH=7,DAY_OF_YEAR=158,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=4,HOUR_OF_DAY=16,MINUTE=22,SECOND=24,MILLISECOND=368,ZONE_OFFSET=28800000,DST_OFFSET=0]

此时只需要将claendar对象传递给调用者就可。

2)不带时分秒的格式

@Testpublic void calendar3(){// Date 转换为String  Date ddate = new Date();String sdate=(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(ddate);  System.out.println(sdate);//2017-06-07 16:14:17// String转换为Date  Date date = null;SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");  try {date=dateFormat.parse(sdate);System.out.println(date);//输出:Wed Jun 07 00:00:00 CST 2017} catch (ParseException e) {e.printStackTrace();} Calendar calendar=Calendar.getInstance();  calendar.setTime(date);  System.out.println(calendar);}
其中calendar的输出是:java.util.GregorianCalendar[time=1496764800000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2017,MONTH=5,WEEK_OF_YEAR=23,WEEK_OF_MONTH=2,DAY_OF_MONTH=7,DAY_OF_YEAR=158,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=28800000,DST_OFFSET=0]

若:从数据库中取出来的date本身就不带时分秒的话会跟简单,将上边的date转换去掉即可,原理同带时分秒的转换。

二、calendar 转date

@Testpublic void calendar3(){Date date = new Date();//date 转calendarCalendar calendar = Calendar.getInstance();calendar.setTime(date);System.out.println(calendar);//得到calendar 转 dateDate ddate=calendar.getTime();System.out.println(ddate);}
calendar 转String可以借助date类型进行相互转换。

其它时间格式的转换现在不介绍,如有需求后期在补充。

原创粉丝点击