2019独角兽企业重金招聘Python工程师标准>>>
先上一段代码
public class DataTransfer
{public static void main(String[] args) {String dateStr = "Sep 30, 2014 12:00:00 AM";SimpleDateFormat sdf = new SimpleDateFormat();sdf.applyPattern("MMM dd, yyyy HH:mm:ss a");try {Date parse = sdf.parse(dateStr);sdf.applyPattern("yyyy-MM-dd");System.out.println(sdf.format(parse));} catch (ParseException e) {e.printStackTrace();}}
}
运行时会触发解析异常,英文按地区装换,汉语言环境无法解析英文字符
java.text.ParseException: Unparseable date: "Sep 30, 2014 12:00:00 AM"at java.text.DateFormat.parse(Unknown Source)at com.tester.date.DataTransfer.main(DataTransfer.java:21)
这是由于本人的笔记本是中文环境,所以导致英文无法解析,如果把dateStr改成下面的
String dateStr = "九月 30, 2014 14:55:52 下午";
这种可以完全执行,遇到这种问题该如何处理呢。
---------------------------------------------------------------------------------------------------------------------
首先来说问题肯定发生在
SimpleDateFormat
对象上,那怎么做才能让第一次的字符串日期正常解析呢,大拿在SimpleDateFormat的父类上
SimpleDateFormat sdf = (SimpleDateFormat) SimpleDateFormat.getDateInstance(0, Locale.ENGLISH);
通过设置地区来设置,第一个参数是时间显示风格,默认是0,再次不再深究,日常开发几乎没用到过。
然后解析
String dateStr = "Sep 30, 2014 12:00:00 AM";
完全正确,异常完全消失,同样中文的可切换到中文状态下。
注意:在这里提醒一下,格式化字符换(如"MMM dd, yyyy HH:mm:ss a")从哪儿得到,很简单,看SimpleDateFormat源码或者java开发文档。
时间的加法和减法问题,相信大多数人做时间加减法都会去使用Calendar对象,而不是使用SimpleDateFomat+Date,这里给大家演示一下这种方法,至于你用或者不用,那就不是我要关心的事了。
private void setOffestDate(int ndays){Date date = new Date(System.currentTimeMillis());SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(sdf.format(date));date.setTime(System.currentTimeMillis()+1000*3600*24*ndays);System.out.println(sdf.format(date));
}
ndays=0表示当天
ndyas为正数时表示时间向前
ndays为负数的售后表示时间后退