Files
timefmt/examples/example_test.go
2026-02-08 16:10:41 +11:00

190 lines
4.7 KiB
Go

package examples
import (
"fmt"
"log"
"time"
"git.haelnorr.com/h/timefmt"
)
// Example demonstrating basic usage of the builder
func Example_basic() {
format := timefmt.NewBuilder().
Year4().Dash().
MonthNumeric2().Dash().
DayNumeric2().
Build()
fmt.Println("Go format:", format.GoFormat())
fmt.Println("LDML:", format.LDML())
fmt.Println("Description:", format.Description())
// Output:
// Go format: 2006-01-02
// LDML: yyyy-MM-dd
// Description: Year (4-digit), dash, Month (2-digit), dash, Day (2-digit)
}
// Example showing how to use pre-built formats
func Example_prebuilt() {
now := time.Date(2026, time.February, 8, 15, 4, 5, 0, time.UTC)
fmt.Println("ISO8601:", timefmt.ISO8601.Format(now))
fmt.Println("DateOnly:", timefmt.DateOnly.Format(now))
fmt.Println("DateTime:", timefmt.DateTime.Format(now))
fmt.Println("DateUS:", timefmt.DateUS.Format(now))
fmt.Println("Kitchen:", timefmt.Kitchen.Format(now))
// Output:
// ISO8601: 2026-02-08T15:04:05Z
// DateOnly: 2026-02-08
// DateTime: 2026-02-08 15:04:05
// DateUS: 02/08/2026
// Kitchen: 3:04 PM
}
// Example parsing an existing Go format string
func Example_parsing() {
format, err := timefmt.ParseGoFormat("02/01/2006 15:04:05")
if err != nil {
log.Fatal(err)
}
fmt.Println("LDML:", format.LDML())
fmt.Println("Description:", format.Description())
// Output:
// LDML: dd/MM/yyyy HH:mm:ss
// Description: Day (2-digit), slash, Month (2-digit), slash, Year (4-digit), space, Hour (24-hour, 2-digit), colon, Minute (2-digit), colon, Second (2-digit)
}
// Example creating a complex custom format
func Example_complex() {
format := timefmt.NewBuilder().
WeekdayFull().Comma().
MonthFull().Space().
DayNumeric().Comma().
Year4().Space().
Literal("at").Space().
Hour12().Colon().
Minute().Space().
AMPM().
Build()
testTime := time.Date(2026, time.February, 8, 15, 4, 5, 0, time.UTC)
fmt.Println("Formatted:", format.Format(testTime))
fmt.Println("LDML:", format.LDML())
// Output:
// Formatted: Sunday, February 8, 2026 at 3:04 PM
// LDML: EEEE, MMMM d, yyyy 'at' h:mm a
}
// Example showing format conversion for user documentation
func Example_documentation() {
// Imagine this comes from user configuration
userFormat := "2006-01-02 15:04:05 MST"
format, err := timefmt.ParseGoFormat(userFormat)
if err != nil {
log.Fatal(err)
}
// Display to user
fmt.Println("Your timestamp format:")
fmt.Printf(" Format: %s\n", format.LDML())
fmt.Printf(" Example: %s\n", format.Example())
fmt.Println()
fmt.Println("Detailed breakdown:")
fmt.Printf(" %s\n", format.Description())
// Output:
// Your timestamp format:
// Format: yyyy-MM-dd HH:mm:ss zzz
// Example: 2026-02-08 15:04:05 MST
//
// Detailed breakdown:
// Year (4-digit), dash, Month (2-digit), dash, Day (2-digit), space, Hour (24-hour, 2-digit), colon, Minute (2-digit), colon, Second (2-digit), space, Timezone abbreviation
}
// Example using format fragments directly
func Example_fragments() {
// Create a format using fragments directly
format := timefmt.NewFormat(
timefmt.Year4Digit,
"/",
timefmt.MonthNumeric2,
"/",
timefmt.DayNumeric2,
)
fmt.Println("Go format:", format.GoFormat())
fmt.Println("LDML:", format.LDML())
// Output:
// Go format: 2006/01/02
// LDML: yyyy/MM/dd
}
// Example for form validation error messages
func Example_validation() {
format := timefmt.DateOnly
// Simulated user input validation
userInput := "02-08-2026" // Wrong format
_, err := format.Parse(userInput)
if err != nil {
fmt.Printf("Error: Invalid date format\n")
fmt.Printf("Expected: %s\n", format.Description())
fmt.Printf("Example: %s\n", format.Example())
}
// Output:
// Error: Invalid date format
// Expected: Year (4-digit), dash, Month (2-digit), dash, Day (2-digit)
// Example: 2026-02-08
}
// Example showing timezone handling
func Example_timezone() {
format := timefmt.NewBuilder().
Year4().Dash().MonthNumeric2().Dash().DayNumeric2().
Space().
Hour24().Colon().Minute().Colon().Second().
Space().
TimezoneOffsetColon().
Build()
loc := time.FixedZone("EST", -5*3600)
t := time.Date(2026, time.February, 8, 15, 4, 5, 0, loc)
fmt.Println("Formatted:", format.Format(t))
fmt.Println("LDML:", format.LDML())
// Output:
// Formatted: 2026-02-08 15:04:05 -05:00
// LDML: yyyy-MM-dd HH:mm:ss ZZZZZ
}
// Example demonstrating millisecond precision
func Example_subseconds() {
format := timefmt.NewBuilder().
Hour24().Colon().
Minute().Colon().
Second().
Millisecond().
Build()
t := time.Date(2026, time.February, 8, 15, 4, 5, 123456789, time.UTC)
fmt.Println("Formatted:", format.Format(t))
fmt.Println("Go format:", format.GoFormat())
// Output:
// Formatted: 15:04:05.123
// Go format: 15:04:05.000
}