【问题标题】: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 datejava - 如何从java中的特定日期获取前7个日期?我从当前日期得到7个日期,但我想从特定日期开始
【发布时间】:2018-01-09 18:31:40
【问题描述】:
//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 个日期。

【问题讨论】:

  • 拥有一个变量particularDate 对日历实例没有任何作用。您必须将其实际设置为该日期。
  • 在 java 8 中,您可以使用 LocalDateTime 轻松实现。请阅读。

标签: java android date android-date java-calendar


【解决方案1】:

tl;博士

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 项目。

【讨论】:

    【解决方案2】:

    正如 Uta Alexandru 和 Basil Bourque 已经说过的,不要使用早已过时的课程 SimpleDateFormatCalendarjava.time,现代 Java 日期和时间 API,也称为 JSR-310,使用起来更方便:

        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 Backport,即新类的后向端口(JSR 310 的 ThreeTen)。
    • 在 Android 上,使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。

    链接

    【讨论】:

    • 我在android studio中运行异常:java.lang.NoClassDefFoundError: Failed resolution of: Ljava/time/format/DateTimeFormatter;
    • 你在正确的轨道上。将导入语句更改为导入 org.threeten.bp.format.DateTimeFormatterorg.threeten.bp.LocalDate(来自后端的类,而不是来自 java.time 包的类)。
    • 你能告诉我导入 org.threeten.bp 的依赖项吗?
    • 你需要the ThreeTenABP project,这里都有解释:How to use ThreeTenABP in Android Project。对不起,我不知道比那里说的更多。 @SATYAJITTARAFDAR
    • 依赖是:编译组:'org.threeten',名称:'threetenbp',版本:'1.3.3',分类器:'no-tzdb'
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-05-14
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      • 2017-01-16
      相关资源
      最近更新 更多