2016-12-02 5 views
0

私は実際に最後の3つの日付を見つけました。私がしたいことは、各日付から5時間45分を減算します。どのように実装できますか?日付の値を減算する

私がこれまで行ってきたコードは次のとおりです。

public static List<Date> getPastThreeDays() { 
    List<Date> pDates = new ArrayList<Date>(); 
    for (int i = 1; i <= 3; i++) { 
     Calendar cal = Calendar.getInstance(); 
     cal.add(Calendar.DATE, -i); 
     Date date = cal.getTime(); 
     String pastDate = sdf.format(date); 
     Date pstThreesDates; 
     try { 
      pstThreesDates = sdf.parse(pastDate); 
      pDates.add(pstThreesDates); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
    } 
    return pDates; 
} 

public static void main(String[] args) throws ParseException { 
    // for getting past three dates 
    System.out.println("-----Formatted Past Three Days-----"); 
    List<Date> pastThreeDatesList = getPastThreeDays(); 
    for (Date date : pastThreeDatesList) { 
     System.out.println("Orignal:" + date); 
    } 
+0

ヒント:「日付」は、Unixエポックからわずか数ミリ秒です。あなたは 'getTime()'を呼ぶことによってその番号を得ることができます。その後、5時間45分でミリ秒数を減算することができます。 'setTime'を呼び出すか、新しい' Date'を作成することができます... –

+1

'Calendar.add()'を使っています - 何が欠けていますか? – slim

+2

また、Java 8の 'java.time'パッケージでクラスを使用すると、日付に関するほとんどすべてが簡単になることに注意してください。 – slim

答えて

0

次のようにそれから5hr 45分をsubstractその後、ミリ秒に日付を変換します。面倒な古い

public static void main(String[] args) { 

     System.out.println("-----Formatted Past Three Days-----"); 
     List<Date> pastThreeDatesList = getPastThreeDays(); 
     for (Date date : pastThreeDatesList) { 
      System.out.println("Orignal:"+date); 

      long mDateMills= date.getTime() - ((5*3600 *1000)+ 45*60*1000); //you convert your date to millisecond then subtract 5h45min(in milliseconds from it) 
      String mNewDate= millsToDateFormat(mDateMills); 

      System.out.println("new Date:"+mNewDate); 
     } 
} 

public static String millsToDateFormat(long mills) { 

     Date date = new Date(mills); 
     DateFormat formatter = new SimpleDateFormat("HH:mm:ss"); 
     String dateFormatted = formatter.format(date); 
     return dateFormatted; 
    } 
+0

回答ありがとうございます –

1

あなたはJodaTimeからAPIのDateTimeを使用して、このようなものにすることができます:依存関係のうち滞在について

Date date = new Date(); 
    DateTime dateTime = new DateTime(date); 
    DateTime newDateTime = dateTime.minusHours(5).minusMinutes(45); 
+1

私はOPが本/コースから練習をしていると推測しているので、JodaTimeは許可されません。 Java 8はJodaTimeと同じAPIを持っているので、Java <= 7で止まっていなければ、もはや必要なくなります。 – slim

+0

これは私の意見ですが、1行でコードを読んだ人は本当に何をしているのか分かります高速、カレンダーまたは日付を使用してコードをもっと冗長にする。 @ Vadimの回答 –

+1

のような他の依存関係を使用できない場合は、現在保守モードのJoda-Timeプロジェクトはjava.timeクラスに移行するように指示します。 –

1

どのように?

 Calendar cal = Calendar.getInstance(); 
     cal.add(Calendar.DATE, -i); 
     Calendar calLess5_45 = Calendar.getInstance(); 
     calLess5_45.setTimeInMillis(cal.getTimeInMillis() - (1000*60*45) - (1000*60*60*5)); 

または日付と:

 Date initialDate = cal.getTime(); 
     Date dateLess5_45 = new Date(initialDate.getTime() - (1000*60*45) - (1000*60*60*5)); 
0

java.time

date-timeクラスは従来のもので、java.timeクラスに取って代わられています。

タイムゾーンは、日付を決定し、日数を減算する際に重要です。日付と日の長さは、ゾーンごとに世界中で異なります。

ZoneId z = ZoneId.of("America/Montreal"); 
ZonedDateTime zdtNow = ZonedDateTime.now(z); 

1日を引く。夏時間などの異常を考慮します。

ZonedDateTime zdtYesterday = zdtNow.minusDays(1); 

5時間45分を減算します。

Duration d = Duration.ofHours(5).plusMinutes(45); // or Duration.parse("PT5H45M") in standard ISO 8601 string format. 
ZonedDateTime zdtEarlier = zdtYesterday.minus(d) ; 
関連する問題