2016-12-02 108 views
0

我實際上已經找到了最後三個日期,我想要做的是從每個日期減去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

提示:「Date」只是Unix時代以來的毫秒數。你可以通過調用getTime()來獲得該數字。然後可以在5小時45分鐘內減去毫秒數。然後你可以調用'setTime'或者創建一個新的'Date' ... –

+1

你已經在使用'Calendar.add()' - 缺少什麼? – slim

+2

另請注意,如果您使用Java 8的java.time包中的類,那麼幾乎所有有關日期的內容都會更加容易。 – slim

回答

0

轉換日期爲毫秒,則在。減去5小時45分鐘,從它如下:

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​​的日期時間,讓這樣的事情:

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

這是OP我同意,但只有一行,每個閱讀代碼的人都知道他在做什麼快速,使用日曆或日期代碼將更加詳細。如果您不能使用其他依賴項,例如@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

的麻煩老日期時間類現在是遺留的,由java.time類代替。

時區對確定日期和加上減去天數至關重要。日期和時間長短因地區而異。

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

減去一天。記錄夏令時等異常情況。

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) ;