簡體   English   中英

如何遍歷一系列日期?

[英]How to Iterate through a range of dates?

我正在嘗試遍歷日期字符串。 字符串的格式類似於 2000.07.28。 我嘗試將它們轉換為雙打,但后來它抱怨了。 我還需要為日期保持相同的格式。 因為我需要打印某些日期。 我試過這個:

  String begDate = "1999.11.18";
  SimpleDateFormat sdf = new     SimpleDateFormat("yyyy.MM.dd");
  Date start = sdf.parse("2010.01.01");
  Date end = sdf.parse("2010.04.01");
  GregorianCalendar gcal = new GregorianCalendar();
  gcal.setTime(start);
  while (!gcal.getTime().after(end))
 {
      Date d = gcal.getTime();
      System.out.println(d);
      gcal.add(Calendar.MONTH, 1);
  }

但是,雖然它確實正確地遍歷日期,但它會更改日期格式。

Date / Calendar沒有格式

您似乎將Date / Calendar對象與其由toString方法生成為 String 的值的文本表示相混淆。 DateCalendar都沒有格式。 每個都有一個你在System.out.println( d );行中隱式調用的toString方法System.out.println( d ); . toString在生成 String 時使用的格式是它自己的默認格式模式,而不是您在解析時指定的格式模式。

這一行:

System.out.println( d );

...是下一行的快捷方式,隱式調用toString顯式:

System.out.println( d.toString() );

toString方法使用自己的格式(一種笨拙、設計不佳的格式),格式為dow mon dd hh:mm:ss zzz yyyy

時間

您正在使用舊的遺留類,這些類已被證明設計不佳、令人困惑且麻煩。 它們已被內置於 Java 8 及更高版本中的java.time框架所取代(並且向后移植到 Java 6 & 7Android )。

對於沒有時間和時區的僅日期值,請使用LocalDate類。

要指定用於解析的格式模式,請使用DateTimeFormatter類。

此示例代碼以您所需的格式輸出以文本形式表示的LocalDate值。 同時,這段代碼收集List序列中的每個LocalDate

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyy.MM.dd" );
LocalDate start = sdf.parse("2010.01.01");
LocalDate end = sdf.parse("2010.04.01");
LocalDate localDate = start;
List<LocalDate> dates = new ArrayList<>();
int i = 0;
while ( ! localDate.isAfter( end ) ) {
    i = i + 1;
    dates.add( localDate );
    String output = localDate.format( formatter );
    System.out.println( "LocalDate # " + i + " : " + output );
    // Set up next loop.
    localDate = localDate.plusDays( 1 );
}
System.out.println( "dates : " + dates.toString() );

打印LocalDate對象List時,請注意每個LocalDate對象的LocalDate::toString方法使用ISO 8601標准中的合理格式生成一個 String。

提示:

  • 在像LocalDate而不是 Strings 這樣的對象中完成大部分工作。 對於業務邏輯,請使用智能對象。 當您需要呈現用戶時,則生成某種格式的字符串。
  • 在交換數據或序列化值時,如果可能,請使用標准 ISO 8601 格式,而不是自己發明,例如yyyy.MM.dd

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM