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


转载于:https://my.oschina.net/ososchina/blog/337288

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值