`

时间转换Long的问题

阅读更多
SimpleDateFormat format = new SimpleDateFormat(pattern);获取的是当前设备的默认时区(如北京时间东八区),
而format.parse(strTime).getTime();获取strTime的long时间,会把strTime当做是东八区再转化为世界时间(UTC)再计算出毫秒数。
如:pattern为:HH:mm格式,strTime:01:06。
而世界时间(UTC)的1970-01-01 00:00:00的毫秒数为0,此时将01:06默认补上1970-01-01即1970-01-01 01:06视为东八区时间,再转
UTC时间变成1969-12-31 17:06来计算,则得出的结果是负数。

解决方法:
/**
 * 根据世界时间的毫秒数转化为pattern格式的String时间
 * @param pattern
 * @param utcTimeMillis 世界时间的毫秒数
 * @return
 */
public static String formatByUTCTimeMillis(String pattern,long utcTimeMillis)
{
	if (!StringUtil.isEmpty(pattern))
	{
		try
		{
			Date d = new Date(utcTimeMillis);
			SimpleDateFormat format = new SimpleDateFormat(pattern);
			format.setTimeZone(TimeZone.getTimeZone("UTC"));
			return format.format(d);
		} catch (Exception e)
		{
			String msg = "formatByUTCTimeMillis(pattern:" + pattern + ",longTime:" + utcTimeMillis + ")";
			Logger.e2s(new Exception(msg,e));
		}
	}
	return null;
}

/**
 * 根据世界时间的String时间转化为世界时间的毫秒数时间
 * @param pattern strTime的日期格式
 * @param utcStrTime 世界时间的pattern格式String时间
 * @return
 */
public static long formatByUTCStrTime(String pattern,String utcStrTime)
{
	if(!StringUtil.isEmpty(pattern) && !StringUtil.isEmpty(utcStrTime))
	{
		try
		{
			SimpleDateFormat format = new SimpleDateFormat(pattern);
			format.setTimeZone(TimeZone.getTimeZone("UTC"));
			return format.parse(utcStrTime).getTime();
		} catch (Exception e)
		{
			String msg = "formatByUTCStrTime(pattern:"+pattern+",strTime:"+utcStrTime+")";
			Logger.e2s(new Exception(msg,e));
		}
	}
	
	return 0;
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics