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();
}
Java中得到两个不同时区下日期之间相差值
最新推荐文章于 2023-09-26 20:03:29 发布
本文提供了一种计算两个不同时间区域日期之间差值的方法。通过转换日期格式并获取指定时区,该方法能够准确地计算出两个日期之间的差异,包括天数、小时数、分钟数等。
1195

被折叠的 条评论
为什么被折叠?



