How to get corresponding quarter of previous year in Scala

Tags: , , , ,



I have a date string with me in the format – “20202” [“yyyyQ”]. Is there a way to get the corresponding quarter of previous year ?

ex- for 20202 , it should be 20192

Answer

An alternative to the other answers is using my lib Time4J and its class CalendarQuarter. Example:

    String input = "20202";

    ChronoFormatter<CalendarQuarter> f =
        ChronoFormatter.ofPattern(
            "yyyyQ", 
            PatternType.CLDR, 
            Locale.ENGLISH, 
            CalendarQuarter.chronology());
    CalendarQuarter cq = f.parse(input);
    CalendarQuarter quarterInPreviousYear = cq.minus(Years.ONE);
    System.out.println(quarterInPreviousYear); // 2019-Q2

Two main advantages of this solution are:

  • Calendar quarters are also intervals so it is easy to iterate over them daily.
  • Internationalization is supported for more than 90 languages, even style-based.

Interval example:

    for (PlainDate date : quarterInPreviousYear) {
        System.out.println(date);
    }

Output:

> 2019-04-01 
> 2019-04-02 
> 2019-04-03
> ...

Printing example in Danish:

    ChronoFormatter<CalendarQuarter> printer =
        ChronoFormatter.ofPattern(
            "QQQQ y", 
            PatternType.CLDR, 
            new Locale("da"), 
            CalendarQuarter.chronology());
    System.out.println(printer.print(quarterInPreviousYear)); // 2. kvartal 2019


Source: stackoverflow