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;
}
时间转换Long的问题
最新推荐文章于 2022-11-21 17:02:40 发布