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型和现实时间转换,希望对大家有所帮助
一个long型与Date型时间转换工具,适合测试人员使用,内附JAVA代码
本工具是一个小型的免安装日期类型跟long类型转换工具,简单并且用处挺大!
Android/java的long类型时间戳,转换成时间格式的工具类
自己写的一个date与long型转换工具,输入时间自动转换为对应的long型
时间long同yyyy-MM-dd HH:mm:ss的转换 非常方便是开发的好助手
Adnroid long类型时间戳时间转换-常用/中间带英文等
java-long型与Date型时间转换工具
长整型时间excel转换换为年月日时分秒
日期转换,long类型时间转换成string类型
支持GPS时、UTC等时间系统的想换转换。
Java日期时间Date类型,long类型,String类型表现形式的转换.pdf
先选择需要转换的时区,然后选择将时间转化为Long值还是将Long值转化为时间。
SQLite日期时间函数,数据库中常常用到日期和字符的转换,本文介绍了在sqlite数据库中日期和字符之间转换的方法,以前对日期运算的操作。
主要用于将数据库中日期用long表示,转换成YYYY-MM-DD格式或YYYY-MM-DD HH:mm:ss格式 若显示为YYYY-MM-DD HH:mm:ss格式,调用如下方法: datetimeFormat(longTypeDate); 若显示为YYYY-MM-DD格式,调用如下方法: ...
支持英文的时间,全数字格式的时间,中文的时间 比如1sep,99; 2003-09-01, 9/1/2009 2008年8月8日等, 转换为C标准统一的struct tm时间
long String date 的各种格式之间的转换类
本工具可实现点分十进制格式的ip地址与长整数的ip之间的转换,可将yyyy-MM-dd hh:mm:hh格式的时间与unsigned long的时间互相转换,可以在主机序和网络序的ip地址之间转换,可以做无符号整数与有符号整数之间转换
一些初学JAVA的朋友可能会遇到JAVA的数据类型之间转换的苦恼,例如,整数和float,double型之间的转换,整数和String类型之间的转换,以及处理、显示时间方面的问下面笔者就开发中的一些体会介绍给大家。 我们知道,...
General Date 基本类型 Format$(Now,"General Date") 返回值 2006-5-25 14:56:15 ...Long Time 操作系统定义的长时间 Format$(Now,"Long Time") 返回值 15:06:36 Medium Time 带AM/PM的12小时制,不带秒