java中跨时区的日期格式转换

先上一段代码

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为负数的售后表示时间后退


你可能感兴趣的:(java中跨时区的日期格式转换)