我想計算親屬日期,這是從01/01/1957到給定日期有多少天不同。我需要同時處理夏令時。下面是代碼:Java如何計算相對日期並同時處理夏令時?
public String convertToRelative(String endDate) throws ParseException {
String relativeDate;
String baseDate = "19570101";
boolean isDST = TimeZone.getDefault().inDaylightTime(new java.util.Date());
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(baseDate));
long time1 = cal.getTimeInMillis();
cal.setTime(sdf.parse(endDate));
long time2 = cal.getTimeInMillis();
if (isDST) {
long between_days = (time2 - time1 - 3600000)/(1000*3600*24);
int relative = Integer.parseInt(String.valueOf(between_days));
relativeDate = String.valueOf(relative + 1);
} else {
long between_days = (time2 - time1)/(1000*3600*24);
int relative = Integer.parseInt(String.valueOf(between_days));
relativeDate = String.valueOf(relative + 1);
}
return relativeDate;
}
從代碼中,你可以看到我檢查,如果時間是在日光節約時:
boolean isDST = TimeZone.getDefault().inDaylightTime(new java.util.Date());
但只得到默認時間由系統。我的問題是我如何檢查給定的日期是夏時制日期,然後做計算部分。我正在使用新西蘭時區。謝謝。
你可以使用Java 8和'java.time.ZonedDateTime'類? – ngreen
不完全清楚你想要做什麼,但它似乎太複雜。只需使用相應的正確時區將起始末端轉換爲「日期」,然後計算差異。 – Henry