Java字符串到日期转换以打印1年的日期

Java字符串到日期转换以打印1年的日期,java,datetime,Java,Datetime,代码 我必须从sDate1字符串开始获取过去一年的所有日期。 这是代码没有任何进展,但现在只是添加了它,希望有人可以帮助。有字符串到LocalDateTime,日期到LocalDateTime的错误,我无法解决,它被卡住了 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd"); String Date = "20181120"; Date date1=new SimpleDateFormat("yyyyMMdd").p

代码 我必须从sDate1字符串开始获取过去一年的所有日期。 这是代码没有任何进展,但现在只是添加了它,希望有人可以帮助。有字符串到LocalDateTime,日期到LocalDateTime的错误,我无法解决,它被卡住了

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd");  
String Date = "20181120";
Date date1=new SimpleDateFormat("yyyyMMdd").parse(sDate1);

LocalDateTime start =LocalDateTime.now();
LocalDateTime end = start.minusYears (1);
List<String> First = new ArrayList<>();
List<String> Second = new ArrayList<>();
List<String> Third = new ArrayList<>();
while (!end.isAfter(start)) {
    First.add(dtf.format(end)+"_*_A.dat");
    Second.add(dtf.format(end)+"_*_B.dat");
    Third.add(dtf.format(end)+"_*_C.dat");
    end = end.plusDays(1);
}

DateTimeFormatter dtf=DateTimeFormatter.of模式(“yyyyMMdd”);
字符串日期=“20181120”;
Date date1=新的SimpleDataFormat(“yyyyymmdd”).parse(sDate1);
LocalDateTime start=LocalDateTime.now();
LocalDateTime end=start.minus年(1);
List First=new ArrayList();
第二个列表=新的ArrayList();
第三个列表=新的ArrayList();
而(!end.isAfter(start)){
添加(dtf.format(end)+“*_A.dat”);
添加(dtf.format(end)+“*_B.dat”);
第三,添加(dtf.format(end)+“*_C.dat”);
结束=结束多个星期(1);
}

不确定我是否理解您的具体任务。但我要写的是:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd");  
String sDate1 = "20181120";
LocalDate date1= LocalDate.parse(sDate1, dtf);

LocalDate start = LocalDate.now();
LocalDate end = start.plusYears(1);
ArrayList<String> first = new ArrayList<>();
ArrayList<String> second = new ArrayList<>();
ArrayList<String> third = new ArrayList<>();
while (!start.isAfter(end)) {
    first.add(dtf.format(start)+"_*_A.dat");
    second.add(dtf.format(start)+"_*_B.dat");
    third.add(dtf.format(start)+"_*_C.dat");
    start = start.plusDays(1);
}

DateTimeFormatter dtf=DateTimeFormatter.of模式(“yyyyMMdd”);
字符串sDate1=“20181120”;
LocalDate date1=LocalDate.parse(sDate1,dtf);
LocalDate start=LocalDate.now();
LocalDate end=start.plusYears(1);
ArrayList first=新的ArrayList();
ArrayList second=新的ArrayList();
ArrayList third=新的ArrayList();
而(!start.isAfter(end)){
首先,添加(dtf.format(start)+“*_A.dat”);
添加(dtf.format(start)+“*_B.dat”);
第三,添加(dtf.format(start)+“*_C.dat”);
开始=开始。多个星期(1);
}

不确定我是否理解您的具体任务。但我要写的是:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd");  
String sDate1 = "20181120";
LocalDate date1= LocalDate.parse(sDate1, dtf);

LocalDate start = LocalDate.now();
LocalDate end = start.plusYears(1);
ArrayList<String> first = new ArrayList<>();
ArrayList<String> second = new ArrayList<>();
ArrayList<String> third = new ArrayList<>();
while (!start.isAfter(end)) {
    first.add(dtf.format(start)+"_*_A.dat");
    second.add(dtf.format(start)+"_*_B.dat");
    third.add(dtf.format(start)+"_*_C.dat");
    start = start.plusDays(1);
}

DateTimeFormatter dtf=DateTimeFormatter.of模式(“yyyyMMdd”);
字符串sDate1=“20181120”;
LocalDate date1=LocalDate.parse(sDate1,dtf);
LocalDate start=LocalDate.now();
LocalDate end=start.plusYears(1);
ArrayList first=新的ArrayList();
ArrayList second=新的ArrayList();
ArrayList third=新的ArrayList();
而(!start.isAfter(end)){
首先,添加(dtf.format(start)+“*_A.dat”);
添加(dtf.format(start)+“*_B.dat”);
第三,添加(dtf.format(start)+“*_C.dat”);
开始=开始。多个星期(1);
}
Stream 添加了生成一组对象的方法

ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z ) ; 
Stream< LocalDate > stream = today.minusYears( 1 ).datesUntil( today ) ;
2017-12-01

2017-12-02

2017-12-03

有关流的更多信息,请参阅和文章,以及。

Stream 添加了生成一组对象的方法

ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z ) ; 
Stream< LocalDate > stream = today.minusYears( 1 ).datesUntil( today ) ;
2017-12-01

2017-12-02

2017-12-03

有关流的更多信息,请参阅和文章,以及

  • 我认为你自己的代码足够好,可以用来回答问题
  • 我还认为巴兹尔·布尔克关于小溪的建议足够好,可以再详细解释一下
  • 你自己的答案 当然,你在评论中发布的代码很难阅读。这里我已经格式化了它(或者我的Eclipse已经格式化):

    总结问题的变化:

    • 您需要解析日期字符串以获取开始日期。然而,没有理由为此引入麻烦且过时的
      SimpleDateFormat
      。time提供了我们需要的所有功能
    • 因为我们只需要一个日期,而不是一天中的时间,所以也没有理由使用
      LocalDateTime
    • 您可能仍然打算在
      A
      B
      C
      的前面放置
      \u*\ ucode>,但您可以自己修复
    使用流
    List first=date1.datesUntil(end.plusDays(1))
    .map(d->d.format(dtf)+“*\u A.dat”)
    .collect(Collectors.toList());
    
    在本例中,我建议为这三个列表使用三个单独的流管道。由于
    datesUntil
    方法接受独占的结束日期,并且您希望包含您的结束日期,因此我们需要添加1天

  • 我认为你自己的代码足够好,可以用来回答问题
  • 我还认为巴兹尔·布尔克关于小溪的建议足够好,可以再详细解释一下
  • 你自己的答案 当然,你在评论中发布的代码很难阅读。这里我已经格式化了它(或者我的Eclipse已经格式化):

    总结问题的变化:

    • 您需要解析日期字符串以获取开始日期。然而,没有理由为此引入麻烦且过时的
      SimpleDateFormat
      。time提供了我们需要的所有功能
    • 因为我们只需要一个日期,而不是一天中的时间,所以也没有理由使用
      LocalDateTime
    • 您可能仍然打算在
      A
      B
      C
      的前面放置
      \u*\ ucode>,但您可以自己修复
    使用流
    List first=date1.datesUntil(end.plusDays(1))
    .map(d->d.format(dtf)+“*\u A.dat”)
    .collect(Collectors.toList());
    

    在本例中,我建议为这三个列表使用三个单独的流管道。由于
    datesUntil
    方法接受独占的结束日期,并且您希望包含您的结束日期,因此我们需要添加1天。

    DateTimeFormatter dtf=DateTimeFormatter.ofPattern(“yyyyymmdd”);字符串sDate1=“20181120”;LocalDate date1=LocalDate.parse(sDate1,dtf);LocalDate end=date1.plusYears(1);ArrayList first=新的ArrayList();ArrayList second=新的ArrayList();ArrayList third=新的ArrayList();虽然(!date1.isAfter(end)){first.add(dtf.format(date1)+“*_A.dat”);second.add(dtf.format(date1)+“_B.dat”);third.add(dtf.format(date1)+“u C.dat”);date1=date1.plusDays(1)}我使用了localdatetime,这导致了问题,感谢您的帮助。如果需要,您可以编辑您的答案。@th0rben,感谢您提供对提问者有帮助的答案。然而,为了对其他读者也有帮助(甚至对提问者更有帮助),我建议添加关于如何解决问题的解释。DateTimeFormatter dtf=DateTimeFormatter.of模式(“yyyyMMdd”);字符串sDate1=“20181120”;LocalDate date1=LocalDate.parse(sDate
    20181120*_A.dat
    20181121*_A.dat
    20181122*_A.dat
    20181123*_A.dat
    …
    20191118*_A.dat
    20191119*_A.dat
    20191120*_A.dat
    
        List<String> first = date1.datesUntil(end.plusDays(1))
                .map(d -> d.format(dtf) + "_*_A.dat")
                .collect(Collectors.toList());