时间转换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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值