在程序中我们经常会将某一个时间戳存储到数据库,或者将数据库中的时间戳取出格式化成某种显示格式,或者是计算两个日期之间的相隔天数……下面小编就将最近整理的关于日期格式化小插曲分享给大家;
小编经常用到的主要是Date(java.util.Date)和DateTime(org.joda.time.DateTime)两种:
1.获取当前时间戳
Date now = new Date();
2.格式化
DateFormat dateFormat = DateFormat.getDateInstance();或者 SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd");
String str2 = dateFormat.format(now); 或者 String str2 = sdf3.format(now);
3.计算相隔天数
public static int daysBetween(String smdate,String bdate) throws ParseException, Exception{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(smdate));
long time1 = cal.getTimeInMillis();
cal.setTime(sdf.parse(bdate));
long time2 = cal.getTimeInMillis();
long between_days=(time2-time1)/(1000*3600*24);
return Integer.parseInt(String.valueOf(between_days));
}
4.使用DateTime类计算N天之后的零点
DateTime dateTime = DateTime.now().dayOfYear().addToCopy(N).withMillisOfDay(0);
DateTime格式化大全:http://blog.csdn.net/liuxingbin/article/details/6170817
5.日期格式化的小插曲
在上面的2中,两种格式化方式实例如下:
public static void main(String[] args) throws ParseException, Exception {
Date now = new Date();
DateFormat dateFormat = DateFormat.getDateInstance();
String str2 = dateFormat.format(now);
System.out.println("使用dateFormat格式化之后的日期为:" + str2);
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd");
String str3 = sdf3.format(now);
System.out.println("使用SimpleDateFormat格式化之后的日期为:" + str3);
}
执行的结果为:
细心的朋友会发现,两种格式化之后的日期不一样,SimpleDateFormat 默认格式化的样式为“yyyy-MM-dd”,而DateFormat 默认格式化的样式为“yyyy-M-dd”,虽然结果不一样,但是在Windows系统中,不会有任何问题,但是在服务器的Linux系统中,两种不一样的格式调用daysBetween方法计算相隔天数时,直接提示:
java.text.ParseException: Unparseable date: "Feb 21, 2017"
at java.text.DateFormat.parse(DateFormat.java:357)
at com.youxinpai.changzheng.guide.service.SuperSaleApplicationServicev10.impl.SuperSaleApplicationServiceImpl.daysBetween(SuperSaleApplicationServiceImpl.java:245)
at com.youxinpai.changzheng.guide.service.SuperSaleApplicationServicev10.impl.SuperSaleApplicationServiceImpl.getApplicationStatus(SuperSaleApplicationServiceImpl.java:200)
所以使用日期格式化要注意保持格式化方法的一致性;
但是我们在项目中还是尽可能少的使用 simpleDateFormat 类,因为它的性能问题太值得重视了:simpleDateFormat的性能问题;
以上就是小编在开发中涉及到的日期类的相关知识,希望能帮大家少走弯路;