我想计算亲属日期,这是从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