加载中…
个人资料
Mars-Zhan
Mars-Zhan
  • 博客等级:
  • 博客积分:0
  • 博客访问:319,249
  • 关注人气:52
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

JAVA得到两个时间的时间差(精确到毫秒)

(2016-10-18 11:08:23)
标签:

gettime

分类: JAVA
 
这里主要采用了gettime()函数,此函数返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。记住,这里GMT是
格林威治标准时间。因此,不同时区进行测试的时候,输入时间距离设置的标准时间的毫秒数不一样的。


SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        long between = 0;
        try {
            Java.util.Date begin = dfs.parse("2009-07-10 10:22:21.214");
            ;
            between = (end.getTime() - begin.getTime());// 得到两者的毫秒数
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        long day = between / (24 * 60 * 60 * 1000);
        long hour = (between / (60 * 60 * 1000) - day * 24);
        long min = ((between / (60 * 1000)) - day * 24 * 60 - hour * 60);
        long s = (between / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
        long ms = (between - day * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000
                - min * 60 * 1000 - s * 1000);
        System.out.println(day + "天" + hour + "小时" + min + "分" + s + "秒" + ms
                + "毫秒");

今天在处理facebook的json时间时,遇到了一个问题,整整困扰了一下午,吃完饭才想出来。

facebook给的时间格式"yyyy-MM-ddTHH:mm:ss+0000"

要解析成中国的日期

boss之前的Utils都是转换成毫秒级去比对的,我也不好去改,就也转换着去做,结果发现当日期的时间小于08:00:00的时候,就会报错(不要问我是怎么知道的,我从一天,12小时,又以为是24小时制和12小时制的转换,各种都试了,然后就发现了)。

估摸着是格林尼治时间,接着就去看方法的doc,发现了是Date.getTime()的问题。

  1. "color:#330000;">public long getTime ()  
  2. Added in API level 1  
  3. Returns this Date as millisecond value. The value is the number of milliseconds since Jan. 11970midnight GMT.  
  4. Returns  
  5. the number of milliseconds since Jan. 11970midnight GMT.  

原来返回的是GMT啊,然后就去找解决办法了。

就这么做:

  1. private static long dateToMillisecond(String date) throws ParseException  
  2.         SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss+0000");  
  3.         sdf.setTimeZone(TimeZone.getTimeZone("GMT"));  
  4.         Date dt sdf.parse(date);  
  5.         System.out.println(dt.getTime());  
  6.         return dt.getTime();  
  7.      

直接在得到数据的时候,默认设成gmt的时区,这样就没了时区的区分了。(不要想着我是东八区,就加8*60*60*1000ms,告诉你这是不可靠的,万一是别的国家的,时区不是东八,那就又乱错了)。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有