Time Formatting Parsing in Squirrel

import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

public class TimeFormattingParsing {
    public static void main(String[] args) {
        // Here's a basic example of formatting a time
        // according to ISO 8601, which is similar to RFC3339
        ZonedDateTime now = ZonedDateTime.now();
        System.out.println(now.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));

        // Time parsing uses the same formatter as formatting
        String dateString = "2012-11-01T22:08:41+00:00";
        ZonedDateTime t1 = ZonedDateTime.parse(dateString, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
        System.out.println(t1);

        // You can also create custom formatters
        DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern("h:mma");
        System.out.println(now.format(customFormatter));

        customFormatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss yyyy");
        System.out.println(now.format(customFormatter));

        customFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX");
        System.out.println(now.format(customFormatter));

        String timeString = "8:41 PM";
        customFormatter = DateTimeFormatter.ofPattern("h:mm a");
        LocalDateTime t2 = LocalDateTime.parse(timeString, customFormatter);
        System.out.println(t2);

        // For purely numeric representations you can also
        // use standard string formatting with the extracted
        // components of the time value
        System.out.printf("%d-%02d-%02dT%02d:%02d:%02d-00:00%n",
                now.getYear(), now.getMonthValue(), now.getDayOfMonth(),
                now.getHour(), now.getMinute(), now.getSecond());

        // Parse will throw a DateTimeParseException on malformed input
        try {
            customFormatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss yyyy");
            LocalDateTime.parse("8:41PM", customFormatter);
        } catch (DateTimeParseException e) {
            System.out.println("Parsing error: " + e.getMessage());
        }
    }
}

This Java code demonstrates time formatting and parsing using the java.time package, which is the modern way to handle dates and times in Java. Here’s an explanation of the key points:

  1. We use ZonedDateTime for times with time zones, and LocalDateTime for times without time zones.

  2. The DateTimeFormatter class is used for both formatting and parsing. There are predefined formatters like ISO_OFFSET_DATE_TIME, and you can create custom formatters using patterns.

  3. The format method is used to convert a date/time object to a string, while parse is used to convert a string to a date/time object.

  4. Custom patterns use letters to represent different parts of a date/time. For example, ‘yyyy’ for year, ‘MM’ for month, ‘dd’ for day, ‘HH’ for hour (24-hour), ‘mm’ for minute, ‘ss’ for second.

  5. When parsing fails due to mismatched formats, a DateTimeParseException is thrown.

  6. Java’s printf can be used for custom numeric formatting of date/time components.

This code provides similar functionality to the original example, adapted to Java’s conventions and standard library. The output will vary based on the current time when run, but the format will be consistent with the patterns specified.