2016-12-02 110 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) ;