public static void main(String[] args) throws Exception {
addZoneOffset("20191226101400");
}
public LocalDateTime getZoneTime2(LocalDateTime time, ZoneId dest) {
Objects.requireNonNull(dest);
return getZoneTime(time, null, dest);
}
public static LocalDateTime getZoneTime(LocalDateTime time,ZoneId src,ZoneId dest) {
Objects.requireNonNull(dest);
ZonedDateTime z1=null;
if (src==null) {
z1 = time.atZone(ZoneId.systemDefault());
}else{
z1 = time.atZone(src);
}
ZonedDateTime z2 = z1.withZoneSameInstant(dest);
long hours = Duration.between(z2.withEarlierOffsetAtOverlap(), z2.withLaterOffsetAtOverlap()).toHours();
z2= z2.plusHours(hours);
getZoneDesc(src);
System.out.println(dest.getId()+"对应得标准时区:"+getZoneDesc(dest));
System.out.println("目标时区"+dest+"的时间"+z2.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
System.out.println("-------------");
return z2.toLocalDateTime();
}
private static String getZoneDesc(ZoneId dest) {
Objects.requireNonNull(dest);
ZoneRules rule=dest.getRules();
String standardOffset = rule.getStandardOffset(ZonedDateTime.now(dest).toInstant()).getId();
String s = standardOffset.split(":")[0];
int Offset = Integer.parseInt(s);
if (Offset>0) {
return "GMT+"+Offset;
}else{
return "GMT"+Offset;
}
}
public static String addZoneOffset(String time) throws Exception {
long zoneInfoOffset = getZoneOffset();
long timeToLong = new SimpleDateFormat("yyyyMMddHHmmss").parse(time).getTime();
long currOffset = TimeZone.getDefault().getRawOffset();
timeToLong = timeToLong + zoneInfoOffset - currOffset;
Date date = new Date();
date.setTime(timeToLong);
time = new SimpleDateFormat("yyyyMMddHHmmss").format(date);
return time;
}
public static String subZoneOffset(String time) throws Exception {
long zoneInfoOffset = getZoneOffset();
long currOffset = TimeZone.getDefault().getRawOffset();
long timeToLong = new SimpleDateFormat("yyyyMMddHHmmss").parse(time).getTime();
timeToLong = timeToLong - zoneInfoOffset + currOffset;
Date date = new Date();
date.setTime(timeToLong);
time = new SimpleDateFormat("yyyyMMddHHmmss").format(date);
return time;
}
private static long getZoneOffset() {
TimeZone timeZone = TimeZone.getTimeZone("GMT-6");
timeZone.getDSTSavings();
return timeZone.getRawOffset();
}