繁体   English   中英

如何从Java中的特定日期获取前7个日期?我正在从当前日期获取7个日期,但我想从特定日期获取

[英]How to get previous 7 dates from a particular date in java?I am getting 7 dates from present date, but I want from particular date

//explain
public class DateLoop {
    static String finalDate; 
    static String particularDate;

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        SimpleDateFormat sdf = new SimpleDateFormat("d-M-yyyy ");
        Calendar cal = Calendar.getInstance();
        particularDate = "2-1-2018";
        // get starting date
        cal.add(Calendar.DAY_OF_YEAR, -7);

        // loop adding one day in each iteration
        for(int i = 0; i< 7; i++){
            cal.add(Calendar.DAY_OF_YEAR, 1);
            finalDate =sdf.format(cal.getTime());
            System.out.println(finalDate);
            //ie, its giving previous 7 dates from present date, but I want
            //particular date... thanks in advance
        }
    }

}

即,它给从当前日期的前7个日期,但我想要从特定日期的前7个日期。

tl; dr

LocalDate.of( 2018 , Month.JANUARY , 23 )
         .minusDays( … )

java.time

您正在使用麻烦的旧日期时间类,这些类现在已被遗留,由java.time类取代。

使用LocalDate表示仅日期,没有日期。

使用Month枚举。

LocalDate start = LocalDate.of( 2018 , Month.JANUARY , 23 ) ;  // 2018-01-23.

使用月份数字,1月至12月为1-12。

LocalDate start = LocalDate.of( 2018 , 1 , 23 ) ;  // 2018-01-23.

收集日期序列。

List<LocalDate> dates = new ArrayList<>( 7 ) ;
for( int i = 1 ; i <= 7 ; i ++ ) {
    LocalDate ld = start.minusDays( i ) ;  // Determine previous date.
    dates.add( ld ) ;  // Add that date object to the list. 
}

对于较早的Android,请使用ThreeTen- BackportThreeTenABP项目。

正如Uta Alexandru和Basil Bourque已经说过的,不要使用过长的类SimpleDateFormatCalendar 现代Java日期和时间API(也称为JSR-310) java.time可以更好地使用:

    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("d-M-uuuu");
    LocalDate date = LocalDate.parse("2-1-2018", dtf)
            .minusDays(7);

    for(int i = 0; i < 7; i++) {
        date = date.plusDays(1);
        String finalDate = date.format(dtf);
        System.out.println(finalDate);
    }

打印:

27-12-2017
28-12-2017
29-12-2017
30-12-2017
31-12-2017
1-1-2018
2-1-2018

该代码不仅稍微更简单,更短,更重要的是,它更清晰,更自然。

问题:我可以在Android上使用java.time吗?

当然可以。 它至少需要Java 6

  • 在Java 8和更高版本中,内置了新的API。
  • 在Java 6和7中,获取ThreeTen反向端口,即新类的反向端口(JSR 310的ThreeTen)。
  • 在Android上 ,使用Android版本的ThreeTen Backport。 它称为ThreeTenABP。

链接

如果您想从某些数据中获取日期,请执行以下操作。

public void dateFromRandomDate(String date){
    SimpleDateFormat formatter2=new SimpleDateFormat("dd-MMM-yyyy");  
    Date date2=formatter2.parse(date); 
    Calendar calendar = Calendar.getInstance();
    //this sets the date to given date
    calendar.calendar.setTime(date2);
    //now call getTime() or add ,subtract date from here
    //this will add 1 year to given one,similarlly others will work.
    calendar.add(Calendar.YEAR,1);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM