import java.time.{LocalDateTime, ZoneId}
import java.time.format.DateTimeFormatter
import java.util.Date
import java.text.SimpleDateFormat
object DateFormatsDemo extends App {
// Current date/time using java.time
val now: LocalDateTime = LocalDateTime.now()
println(s"Original LocalDateTime: $now\n")
// --- BASIC COMPONENTS (java.time) ---
println("Year (4 digits): " + now.format(DateTimeFormatter.ofPattern("yyyy")))
println("Year (2 digits): " + now.format(DateTimeFormatter.ofPattern("yy")))
println("Month (01-12): " + now.format(DateTimeFormatter.ofPattern("MM")))
println("Month name (short): " + now.format(DateTimeFormatter.ofPattern("MMM")))
println("Month name (full): " + now.format(DateTimeFormatter.ofPattern("MMMM")))
println("Day of month: " + now.format(DateTimeFormatter.ofPattern("dd")))
println("Day of week (short): " + now.format(DateTimeFormatter.ofPattern("E")))
println("Day of week (full): " + now.format(DateTimeFormatter.ofPattern("EEEE")))
// --- COMMON FULL FORMATS ---
println("YYYY-MM-DD: " + now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))
println("DD/MM/YYYY: " + now.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")))
println("MM-DD-YYYY: " + now.format(DateTimeFormatter.ofPattern("MM-dd-yyyy")))
println("YYYY/MM/DD HH:MM:SS: " +
now.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"))
)
// --- TIME FORMATS ---
println("24-hour time: " + now.format(DateTimeFormatter.ofPattern("HH:mm:ss")))
println("12-hour time: " + now.format(DateTimeFormatter.ofPattern("hh:mm:ss a")))
// --- HUMAN-READABLE TEXT FORMATS ---
println("Full readable date: " +
now.format(DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy"))
)
println("Full date + time: " +
now.format(DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy HH:mm:ss"))
)
// --- ISO / RFC STANDARDS (java.time built-ins) ---
println("ISO_LOCAL_DATE: " + now.format(DateTimeFormatter.ISO_LOCAL_DATE))
println("ISO_LOCAL_DATE_TIME: " + now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME))
println("ISO_ZONED_DATE_TIME: " +
now.atZone(ZoneId.systemDefault()).format(DateTimeFormatter.ISO_ZONED_DATE_TIME)
)
// --- LEGACY SimpleDateFormat (still used in older Scala/Java code) ---
val legacyDate: Date = new Date()
val sdf: SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
println("\nLegacy Date (SimpleDateFormat): " + sdf.format(legacyDate))
}
/*
run:
Original LocalDateTime: 2026-05-20T16:08:37.295658949
Year (4 digits): 2026
Year (2 digits): 26
Month (01-12): 05
Month name (short): May
Month name (full): May
Day of month: 20
Day of week (short): Wed
Day of week (full): Wednesday
YYYY-MM-DD: 2026-05-20
DD/MM/YYYY: 20/05/2026
MM-DD-YYYY: 05-20-2026
YYYY/MM/DD HH:MM:SS: 2026/05/20 16:08:37
24-hour time: 16:08:37
12-hour time: 04:08:37 PM
Full readable date: Wednesday, May 20, 2026
Full date + time: Wednesday, May 20, 2026 16:08:37
ISO_LOCAL_DATE: 2026-05-20
ISO_LOCAL_DATE_TIME: 2026-05-20T16:08:37.295658949
ISO_ZONED_DATE_TIME: 2026-05-20T16:08:37.295658949Z[GMT]
Legacy Date (SimpleDateFormat): 2026-05-20 16:08:37
*/