Java 在日期值中减去时间

Java 在日期值中减去时间,java,date,Java,Date,我实际上已经找到了最后三个日期,我想做的是从每个日期减去5小时45分钟。如何实施 到目前为止,我所做的代码是: public static List<Date> getPastThreeDays() { List<Date> pDates = new ArrayList<Date>(); for (int i = 1; i <= 3; i++) { Calendar cal = Calendar.getInstance()

我实际上已经找到了最后三个日期,我想做的是从每个日期减去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);
    }
公共静态列表getPastThreeDays(){
列表pdate=newarraylist();

对于(int i=1;i您可以使用来自JodaTime的API DateTime,并制作如下内容:

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

您可以使用JodaTime中的API DateTime并制作如下内容:

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

远离依赖关系怎么样

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

远离依赖关系怎么样

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

将日期转换为毫秒,然后从中减去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; 
    }
publicstaticvoidmain(字符串[]args){
System.out.println(“----格式过去三天------”);
List pastThreeDatesList=getPastThreeDays();
for(日期:pastThreeDatesList){
System.out.println(“原始:+日期”);
long mDateMills=date.getTime()-((5*3600*1000)+45*60*1000);//将日期转换为毫秒,然后减去5h45min(毫秒)
字符串mNewDate=millsToDateFormat(mDateMills);
System.out.println(“新日期:+mNewDate”);
}
}
公共静态字符串millsToDateFormat(长mills){
日期=新日期(米尔斯);
DateFormat格式化程序=新的SimpleDateFormat(“HH:mm:ss”);
字符串dateFormatted=格式化程序。格式(日期);
返回日期格式化;
}

将日期转换为毫秒,然后从中减去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; 
    }
publicstaticvoidmain(字符串[]args){
System.out.println(“----格式过去三天------”);
List pastThreeDatesList=getPastThreeDays();
for(日期:pastThreeDatesList){
System.out.println(“原始:+日期”);
long mDateMills=date.getTime()-((5*3600*1000)+45*60*1000);//将日期转换为毫秒,然后减去5h45min(毫秒)
字符串mNewDate=millsToDateFormat(mDateMills);
System.out.println(“新日期:+mNewDate”);
}
}
公共静态字符串millsToDateFormat(长mills){
日期=新日期(米尔斯);
DateFormat格式化程序=新的SimpleDateFormat(“HH:mm:ss”);
字符串dateFormatted=格式化程序。格式(日期);
返回日期格式化;
}
java.time 麻烦的旧日期时间类现在是遗留的,被java.time类取代

时区对于确定日期和加减天数至关重要。日期和一天的长度在全球各地因区域而异

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdtNow = ZonedDateTime.now( z );
减去一天。说明夏令时等异常情况

ZonedDateTime zdtYesterday = zdtNow.minusDays( 1 );
减去五小时四十五分钟的持续时间

Duration d = Duration.ofHours( 5 ).plusMinutes( 45 );  // or Duration.parse( "PT5H45M" ) in standard ISO 8601 string format.
ZonedDateTime zdtEarlier = zdtYesterday.minus( d ) ;
java.time 麻烦的旧日期时间类现在是遗留的,被java.time类取代

时区对于确定日期和加减天数至关重要。日期和一天的长度在全球各地因区域而异

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdtNow = ZonedDateTime.now( z );
减去一天。说明夏令时等异常情况

ZonedDateTime zdtYesterday = zdtNow.minusDays( 1 );
减去五小时四十五分钟的持续时间

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

提示:
Date
只是Unix时代以来的毫秒数。您可以通过调用
getTime()
获得该数字。然后您可以在5小时45分钟内减去毫秒数。然后您可以调用
setTime
或使用它创建一个新的
Date
。您已经在使用
Calendar.add()
--缺少什么?还要注意,如果您使用Java 8的
Java.time
包中的类,那么几乎所有关于日期的内容都会更容易。提示:
Date
只是Unix时代以来的毫秒数。您可以通过调用
getTime()来获得该数字
。然后,您可以在5小时45分钟内减去毫秒数。然后,您可以调用
setTime
或使用它创建一个新的
Date
。您已经在使用
Calendar.add()
--缺少什么?还要注意,如果您使用Java 8的
Java.time
包中的类,那么几乎所有关于日期的内容都会更容易。我猜OP是在做一本书/课程中的练习,所以JodaTime是不允许的。Java 8已经(相当多)与JodaTime相同的API,到目前为止,不再需要它,除非你坚持使用Java,它是OP,我同意,但有一行代码,每个阅读代码的人都知道他在做什么,使用日历或日期,代码将更加冗长。如果你不能使用其他依赖项,比如@Vadim应答Joda Time项目,现在在Maintenac中e模式,建议转到java.time类。我猜OP是在做一本书/课程中的练习,所以JodaTime是不允许的。java 8已经(差不多)与JodaTime相同的API,到目前为止,不再需要它,除非你坚持使用Java,它是OP,我同意,但有一行代码,每个阅读代码的人都知道他在做什么,使用日历或日期,代码将更加冗长。如果你不能使用其他依赖项,比如@Vadim应答Joda Time项目,现在在Maintenac中e模式,建议移动到java.time类。