Java中得到两个不同时区下日期之间相差值

本文提供了一种计算两个不同时间区域日期之间差值的方法。通过转换日期格式并获取指定时区,该方法能够准确地计算出两个日期之间的差异,包括天数、小时数、分钟数等。
import java.util.Date;
import java.util.TimeZone;
  /**
     * 计算两个不同时区日期相差值
     * @param time1 样式:yyyy-mm-dd hh-mm-ss
     * @param zone1 样式:+8
     * @param time2
     * @param zone2
     * @return
     * @auther  梁艳松
     */
    public static String getDatesOffsetWithTimeZone(String time1, String zone1, String time2,String zone2){
              //将YYYY-MM-DD hh:mm:ss格式转为Date类型
              Date date1 = new Date();
              Date date2 = new Date();
              if(time1!=null && !time1.equals("") && time2!=null && !time2.equals("") ){
                    date1 = toDate(time1);
                    date2 = toDate(time2);
               }

             // TimeZone timeZone1 = TimeZone.getTimeZone("GMT+8:00");
             // TimeZone timeZone2 = TimeZone.getTimeZone("GMT-4:00");

             //获得时区
             String gmt1 = "";
             String gmt2 = "";
             if(zone1!=null && !zone1.equals("") && zone2!=null && !zone2.equals("")){
                 //拼接成GMT格式
                 gmt1 = "GMT"+zone1+":00";
                 gmt2 = "GMT"+zone2+":00";                       
             }

                TimeZone timeZone1 = TimeZone.getTimeZone(gmt1);
                TimeZone timeZone2 = TimeZone.getTimeZone(gmt2);
                //计算相差的毫秒数         
                long timeZoneOffset = timeZone2.getOffset(date2.getTime()) - timeZone1.getOffset(date1.getTime());
                long millisOffset = date2.getTime() - date1.getTime();
                long ms = millisOffset - timeZoneOffset;

                //计算相差的时间
                Integer ss = 1000;  
                Integer mi = ss * 60;  
                Integer hh = mi * 60;  
                Integer dd = hh * 24;  

                Long day = ms / dd;  
                Long hour = (ms - day * dd) / hh;  
                Long minute = (ms - day * dd - hour * hh) / mi;  
                Long second = (ms - day * dd - hour * hh - minute * mi) / ss;  
                Long milliSecond = ms - day * dd - hour * hh - minute * mi - second * ss;  

                StringBuffer sb = new StringBuffer();  
                if(day > 0) {  
                    sb.append(day+"天");  
                }  
                if(hour > 0) {  
                    sb.append(hour+"小时");  
                }  
                if(minute > 0) {  
                    sb.append(minute+"分");  
                }  
                if(second > 0) {  
                    sb.append(second+"秒");  
                }  
                if(milliSecond > 0) {  
                    sb.append(milliSecond+"毫秒");  
                }  
                return sb.toString();  
    }

   /**
     * 将输入格式为2004-8-13 12:31:22类型的字符串转换为标准的Date类型
     * @param dateStr 
     * @return
     */
    public static synchronized Date toDate(String dateStr){
        String[] list0 = dateStr.split(" ");
        String date = list0[0];
        String time = list0[1];
        String[] list1 = date.split("-");
        int year = new Integer(list1[0]).intValue();
        int month = new Integer(list1[1]).intValue();
        int day = new Integer(list1[2]).intValue();
        String[] list2 = time.split(":");
        int hour = new Integer(list2[0]).intValue();
        int min = new Integer(list2[1]).intValue();
        int second = new Integer(list2[2]).intValue();
        Calendar cale =  Calendar.getInstance();
        cale.set(year,month-1,day,hour,min,second);
        return cale.getTime();    
    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值