2017-06-01 19 views
0

私は、1995年1月1日から与えられた日付までの何日間違いである親戚日付を計算したいと思いますか?私は同時に夏時間を処理する必要があります。ここでは、コードです:Java相対日付を計算し、夏時間を同時に処理する方法は?

boolean isDST = TimeZone.getDefault().inDaylightTime(new java.util.Date()); 

しかし、それは唯一のシステムからの既定の時間を取得します。

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; 

} 

コードからは、あなたは時間がで夏時間である場合、私がチェック見ることができます。私の質問は、どのように私は指定された日付を確認することができます夏時間の最初の計算部分です。ニュージーランドのタイムゾーンを使用しています。ありがとうございました。

+0

https://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html#until-java.time.temporal.Temporal-java.time.temporal.TemporalUnit-

を次のコードは、あなたがやろうとしている計算のお手伝いをする必要がありますか? – ngreen

+0

何をしようとしているのかはっきりしていませんが、複雑すぎるようです。それぞれの正しいタイムゾーンを使用して開始エンドエンドを 'Date'に変換し、その差を計算します。 – Henry

答えて

0

計算を手動で行うのではなく、組み込みのjava.timeのAPIを使い、使いやすく、DSTの面倒を見てください。 参照してください:あなたは、Java 8と `java.time.ZonedDateTime`クラスを使用することができ

ZoneId auckZone = ZoneId.of("Pacific/Auckland"); 
LocalDateTime base = LocalDate.of(1957, 01, 01).atStartOfDay(); 
ZonedDateTime baseDate = base.atZone(auckZone); 
ZonedDateTime endDate = LocalDate.parse(endDt, DateTimeFormatter.ofPattern("yyyyMMdd")).atStartOfDay().atZone(auckZone); 
System.out.println(baseDate.until(endDate, ChronoUnit.DAYS)); 
+0

ありがとうPallavi、この回答は私の問題を解決しました。そしてコードは私よりもはっきりとシンプルです。再度、感謝します。 –

関連する問題