🎯 Exemples recommandés
Balanced sample collections from various categories for you to explore
Exemples de Date et Heure Web Go
Exemples de date et heure Web Go incluant l'obtention de l'heure actuelle, le formatage, l'analyse et les opérations de fuseau horaire
💻 Obtenir l'Heure Actuelle go
🟢 simple
⭐⭐
Obtenir la date et l'heure système actuelles en utilisant le paquet time de Go avec divers niveaux de précision
⏱️ 20 min
🏷️ go, web, datetime, time
Prerequisites:
Basic Go, time package
// Web Go Get Current Time Examples
// Getting current system time and date with various precision
package main
import (
"fmt"
"time"
)
// 1. Basic Current Time
// GetCurrentTime gets current date and time
func GetCurrentTime() time.Time {
return time.Now()
}
// GetCurrentDate gets current date only
func GetCurrentDate() time.Time {
now := time.Now()
return time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
}
// GetCurrentTimeOnly gets current time only
func GetCurrentTimeOnly() time.Time {
now := time.Now()
return time.Date(0, 1, 1, now.Hour(), now.Minute(), now.Second(), now.Nanosecond(), time.UTC)
}
// GetUnixTimestamp gets current Unix timestamp
func GetUnixTimestamp() int64 {
return time.Now().Unix()
}
// GetUnixTimestampMillis gets current Unix timestamp in milliseconds
func GetUnixTimestampMillis() int64 {
return time.Now().UnixMilli()
}
// GetUnixTimestampNanos gets current Unix timestamp in nanoseconds
func GetUnixTimestampNanos() int64 {
return time.Now().UnixNano()
}
// 2. Time with Timezone
// GetUTC gets current UTC time
func GetUTC() time.Time {
return time.Now().UTC()
}
// GetLocal gets current local time
func GetLocal() time.Time {
return time.Now()
}
// GetLocationByName gets time in specific location
func GetLocationByName(location string) (time.Time, error) {
loc, err := time.LoadLocation(location)
if err != nil {
return time.Time{}, err
}
return time.Now().In(loc), nil
}
// GetTimezoneOffset gets timezone offset in seconds
func GetTimezoneOffset() int {
_, offset := time.Now().Zone()
return offset
}
// GetTimezoneName gets timezone name
func GetTimezoneName() string {
_, name := time.Now().Zone()
return name
}
// 3. High Precision Time
// GetPrecisionTime gets time with high precision
func GetPrecisionTime() time.Time {
return time.Now()
}
// GetMonotonicTime gets monotonic time (cannot go backwards)
func GetMonotonicTime() time.Duration {
start := time.Now()
// Simulate some work
return time.Since(start)
}
// 4. Time Components
// GetCurrentYear gets current year
func GetCurrentYear() int {
return time.Now().Year()
}
// GetCurrentMonth gets current month (1-12)
func GetCurrentMonth() time.Month {
return time.Now().Month()
}
// GetCurrentDay gets current day of month (1-31)
func GetCurrentDay() int {
return time.Now().Day()
}
// GetCurrentHour gets current hour (0-23)
func GetCurrentHour() int {
return time.Now().Hour()
}
// GetCurrentMinute gets current minute (0-59)
func GetCurrentMinute() int {
return time.Now().Minute()
}
// GetCurrentSecond gets current second (0-59)
func GetCurrentSecond() int {
return time.Now().Second()
}
// GetCurrentNanosecond gets current nanosecond (0-999999999)
func GetCurrentNanosecond() int {
return time.Now().Nanosecond()
}
// GetTimeComponents gets all time components as map
func GetTimeComponents() map[string]interface{} {
now := time.Now()
return map[string]interface{}{
"year": now.Year(),
"month": int(now.Month()),
"day": now.Day(),
"hour": now.Hour(),
"minute": now.Minute(),
"second": now.Second(),
"nanosecond": now.Nanosecond(),
"weekday": int(now.Weekday()),
}
}
// 5. Week and Day Information
// GetCurrentWeekday gets current weekday (0=Sunday, 6=Saturday)
func GetCurrentWeekday() time.Weekday {
return time.Now().Weekday()
}
// GetCurrentISOWeekday gets current ISO weekday (1=Monday, 7=Sunday)
func GetCurrentISOWeekday() int {
wd := time.Now().Weekday()
if wd == time.Sunday {
return 7
}
return int(wd)
}
// GetWeekOfYear gets current week of year
func GetWeekOfYear() int {
_, week := time.Now().ISOWeek()
return week
}
// GetYearOfWeek gets ISO year
func GetYearOfWeek() int {
year, _ := time.Now().ISOWeek()
return year
}
// GetDayOfYear gets current day of year
func GetDayOfYear() int {
now := time.Now()
startOfYear := time.Date(now.Year(), 1, 1, 0, 0, 0, 0, now.Location())
return int(now.Sub(startOfYear).Hours()/24) + 1
}
// GetWeekdayName gets current weekday name
func GetWeekdayName() string {
return time.Now().Weekday().String()
}
// GetMonthName gets current month name
func GetMonthName() string {
return time.Now().Month().String()
}
// 6. Time Strings
// GetTimeString gets current time as string
func GetTimeString() string {
now := time.Now()
return fmt.Sprintf("%02d:%02d:%02d", now.Hour(), now.Minute(), now.Second())
}
// GetDateString gets current date as string
func GetDateString() string {
now := time.Now()
return fmt.Sprintf("%04d-%02d-%02d", now.Year(), now.Month(), now.Day())
}
// GetDateTimeString gets current datetime as string
func GetDateTimeString() string {
now := time.Now()
return fmt.Sprintf("%04d-%02d-%02d %02d:%02d:%02d",
now.Year(), now.Month(), now.Day(),
now.Hour(), now.Minute(), now.Second())
}
// GetISO8601 gets ISO 8601 formatted time
func GetISO8601() string {
return time.Now().Format(time.RFC3339)
}
// GetRFC1123 gets RFC 1123 formatted time
func GetRFC1123() string {
return time.Now().Format(time.RFC1123)
}
// 7. Relative Time
// GetTimeSinceEpoch gets seconds since Unix epoch
func GetTimeSinceEpoch() float64 {
return float64(time.Now().UnixNano()) / 1e9
}
// GetTimeUntilMidnight gets seconds until midnight
func GetTimeUntilMidnight() float64 {
now := time.Now()
midnight := time.Date(now.Year(), now.Month(), now.Day(), 23, 59, 59, 0, now.Location())
return midnight.Sub(now).Seconds()
}
// GetTimeSinceMidnight gets seconds since midnight
func GetTimeSinceMidnight() float64 {
now := time.Now()
midnight := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
return now.Sub(midnight).Seconds()
}
// GetDaysInMonth gets number of days in current month
func GetDaysInMonth() int {
now := time.Now()
firstDay := time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, time.UTC)
lastDay := firstDay.AddDate(0, 1, -1)
return lastDay.Day()
}
// IsLeapYear checks if current year is leap year
func IsLeapYear() bool {
year := time.Now().Year()
if year%4 != 0 {
return false
} else if year%100 != 0 {
return true
} else {
return year%400 == 0
}
}
// IsLeapYearFor checks if given year is leap year
func IsLeapYearFor(year int) bool {
if year%4 != 0 {
return false
} else if year%100 != 0 {
return true
} else {
return year%400 == 0
}
}
// 8. Time Measurements
// StartMeasurement starts time measurement
func StartMeasurement() time.Time {
return time.Now()
}
// EndMeasurement ends time measurement and returns duration
func EndMeasurement(start time.Time) time.Duration {
return time.Since(start)
}
// MeasureFunction measures function execution time
func MeasureFunction(fn func()) time.Duration {
start := time.Now()
fn()
return time.Since(start)
}
// 9. Multiple Time Representations
// GetAllTimeFormats gets time in all common formats
func GetAllTimeFormats() map[string]interface{} {
now := time.Now()
return map[string]interface{}{
"unix": now.Unix(),
"unix_millis": now.UnixMilli(),
"unix_nanos": now.UnixNano(),
"iso8601": now.Format(time.RFC3339),
"rfc1123": now.Format(time.RFC1123),
"rfc3339": now.Format(time.RFC3339),
"date": GetDateString(),
"time": GetTimeString(),
"datetime": GetDateTimeString(),
"year": now.Year(),
"month": int(now.Month()),
"day": now.Day(),
"hour": now.Hour(),
"minute": now.Minute(),
"second": now.Second(),
}
}
// 10. Time Arithmetic
// AddDays adds days to current time
func AddDays(days int) time.Time {
return time.Now().AddDate(0, 0, days)
}
// AddMonths adds months to current time
func AddMonths(months int) time.Time {
return time.Now().AddDate(0, months, 0)
}
// AddYears adds years to current time
func AddYears(years int) time.Time {
return time.Now().AddDate(years, 0, 0)
}
// AddHours adds hours to current time
func AddHours(hours float64) time.Time {
return time.Now().Add(time.Duration(hours) * time.Hour)
}
// AddMinutes adds minutes to current time
func AddMinutes(minutes float64) time.Time {
return time.Now().Add(time.Duration(minutes) * time.Minute)
}
// AddSeconds adds seconds to current time
func AddSeconds(seconds float64) time.Time {
return time.Now().Add(time.Duration(seconds) * time.Second)
}
// 11. Time Comparison
// IsBefore checks if current time is before given time
func IsBefore(t time.Time) bool {
return time.Now().Before(t)
}
// IsAfter checks if current time is after given time
func IsAfter(t time.Time) bool {
return time.Now().After(t)
}
// IsBetween checks if current time is between start and end
func IsBetween(start, end time.Time) bool {
now := time.Now()
return now.After(start) && now.Before(end)
}
// Usage Examples
func main() {
fmt.Println("=== Web Go Get Current Time Examples ===
")
// 1. Basic time
fmt.Println("--- 1. Basic Current Time ---")
fmt.Printf("Current datetime: %v
", GetCurrentTime())
fmt.Printf("Current date: %v
", GetCurrentDate())
fmt.Printf("Unix timestamp: %d
", GetUnixTimestamp())
fmt.Printf("Timestamp (ms): %d
", GetUnixTimestampMillis())
// 2. Timezone
fmt.Println("
--- 2. Timezone Information ---")
fmt.Printf("UTC: %v
", GetUTC())
fmt.Printf("Local: %v
", GetLocal())
fmt.Printf("Timezone offset: %d seconds
", GetTimezoneOffset())
fmt.Printf("Timezone name: %s
", GetTimezoneName())
// 3. Components
fmt.Println("
--- 3. Time Components ---")
fmt.Printf("Components: %v
", GetTimeComponents())
// 4. Week/Day info
fmt.Println("
--- 4. Week and Day Information ---")
fmt.Printf("Weekday: %s
", GetWeekdayName())
fmt.Printf("Month: %s
", GetMonthName())
fmt.Printf("Week of year: %d
", GetWeekOfYear())
fmt.Printf("Day of year: %d
", GetDayOfYear())
// 5. String formats
fmt.Println("
--- 5. String Formats ---")
fmt.Printf("Time: %s
", GetTimeString())
fmt.Printf("Date: %s
", GetDateString())
fmt.Printf("DateTime: %s
", GetDateTimeString())
fmt.Printf("ISO8601: %s
", GetISO8601())
fmt.Printf("RFC1123: %s
", GetRFC1123())
// 6. Relative time
fmt.Println("
--- 6. Relative Time ---")
fmt.Printf("Until midnight: %.0f seconds
", GetTimeUntilMidnight())
fmt.Printf("Since midnight: %.0f seconds
", GetTimeSinceMidnight())
fmt.Printf("Days in month: %d
", GetDaysInMonth())
fmt.Printf("Is leap year: %t
", IsLeapYear())
// 7. Time measurement
fmt.Println("
--- 7. Time Measurement ---")
start := StartMeasurement()
time.Sleep(100 * time.Millisecond)
elapsed := EndMeasurement(start)
fmt.Printf("Elapsed: %v
", elapsed)
// 8. All formats
fmt.Println("
--- 8. All Formats ---")
formats := GetAllTimeFormats()
for key, value := range formats {
fmt.Printf("%s: %v
", key, value)
}
// 9. Time arithmetic
fmt.Println("
--- 9. Time Arithmetic ---")
fmt.Printf("Tomorrow: %v
", AddDays(1))
fmt.Printf("Next month: %v
", AddMonths(1))
fmt.Printf("Next year: %v
", AddYears(1))
fmt.Printf("In 24 hours: %v
", AddHours(24))
// 10. Location
fmt.Println("
--- 10. Time in Different Locations ---")
if ny, err := GetLocationByName("America/New_York"); err == nil {
fmt.Printf("New York: %v
", ny)
}
if london, err := GetLocationByName("Europe/London"); err == nil {
fmt.Printf("London: %v
", london)
}
if tokyo, err := GetLocationByName("Asia/Tokyo"); err == nil {
fmt.Printf("Tokyo: %v
", tokyo)
}
fmt.Println("
=== All Get Current Time Examples Completed ===")
}
💻 Formatage de l'Heure go
🟡 intermediate
⭐⭐⭐
Formater les objets time.Time en chaînes en utilisant divers codes de format et modèles personnalisés
⏱️ 25 min
🏷️ go, web, datetime, formatting
Prerequisites:
Intermediate Go, time package, format layouts
// Web Go Time Formatting Examples
// Converting time.Time objects to formatted strings
package main
import (
"fmt"
"time"
)
// 1. Standard Format Codes
// FormatYear formats year in various ways
func FormatYear(t time.Time) map[string]string {
return map[string]string{
"full": fmt.Sprintf("%04d", t.Year()),
"short": fmt.Sprintf("%02d", t.Year()%100),
}
}
// FormatMonth formats month in various ways
func FormatMonth(t time.Time) map[string]string {
return map[string]string{
"numeric": fmt.Sprintf("%02d", t.Month()),
"name": t.Month().String(),
"name_short": t.Format("Jan"),
"numeric_zero": fmt.Sprintf("%d", t.Month()),
}
}
// FormatDay formats day in various ways
func FormatDay(t time.Time) map[string]string {
return map[string]string{
"numeric": fmt.Sprintf("%02d", t.Day()),
"with_ordinal": fmt.Sprintf("%d%s", t.Day(),
getOrdinal(t.Day())),
"name": t.Weekday().String(),
"name_short": t.Format("Mon"),
}
}
func getOrdinal(day int) string {
switch day {
case 1, 21, 31:
return "st"
case 2, 22:
return "nd"
case 3, 23:
return "rd"
default:
return "th"
}
}
// FormatTime formats time in various ways
func FormatTime(t time.Time) map[string]string {
return map[string]string{
"24h": fmt.Sprintf("%02d:%02d:%02d", t.Hour(), t.Minute(), t.Second()),
"12h": t.Format("03:04:05 PM"),
"24h_short": fmt.Sprintf("%02d:%02d", t.Hour(), t.Minute()),
"12h_short": t.Format("03:04 PM"),
"hour_24": fmt.Sprintf("%02d", t.Hour()),
"hour_12": t.Format("3"),
"minute": fmt.Sprintf("%02d", t.Minute()),
"second": fmt.Sprintf("%02d", t.Second()),
"period": t.Format("PM"),
}
}
// 2. Common Date Formats
// FormatISO8601 formats as ISO 8601
func FormatISO8601(t time.Time) string {
return t.Format(time.RFC3339)
}
// FormatRFC1123 formats as RFC 1123
func FormatRFC1123(t time.Time) string {
return t.Format(time.RFC1123)
}
// FormatRFC3339 formats as RFC 3339
func FormatRFC3339(t time.Time) string {
return t.Format(time.RFC3339)
}
// FormatRFC822 formats as RFC 822
func FormatRFC822(t time.Time) string {
return t.Format(time.RFC822)
}
// FormatANSIC formats as ANSIC
func FormatANSIC(t time.Time) string {
return t.Format(time.ANSIC)
}
// FormatUnixDate formats as Unix date
func FormatUnixDate(t time.Time) string {
return t.Format(time.UnixDate)
}
// 3. Regional Formats
// FormatUSDate formats as US date (MM/DD/YYYY)
func FormatUSDate(t time.Time) string {
return fmt.Sprintf("%02d/%02d/%04d", t.Month(), t.Day(), t.Year())
}
// FormatEUDate formats as European date (DD/MM/YYYY)
func FormatEUDate(t time.Time) string {
return fmt.Sprintf("%02d/%02d/%04d", t.Day(), t.Month(), t.Year())
}
// FormatISODate formats as ISO date (YYYY-MM-DD)
func FormatISODate(t time.Time) string {
return fmt.Sprintf("%04d-%02d-%02d", t.Year(), t.Month(), t.Day())
}
// FormatChineseDate formats as Chinese date (YYYY年MM月DD日)
func FormatChineseDate(t time.Time) string {
return fmt.Sprintf("%04d年%02d月%02d日", t.Year(), t.Month(), t.Day())
}
// FormatJapaneseDate formats as Japanese date (YYYY年MM月DD日)
func FormatJapaneseDate(t time.Time) string {
return fmt.Sprintf("%04d年%02d月%02d日", t.Year(), t.Month(), t.Day())
}
// FormatKoreanDate formats as Korean date (YYYY년 MM월 DD일)
func FormatKoreanDate(t time.Time) string {
return fmt.Sprintf("%04d년 %02d월 %02d일", t.Year(), t.Month(), t.Day())
}
// 4. Custom Formats
// FormatReadable formats in human-readable form
func FormatReadable(t time.Time) string {
return fmt.Sprintf("%s, %s %d, %s at %02d:%02d %s",
t.Weekday(),
t.Month(),
t.Day(),
t.Year(),
t.Hour()%12,
t.Minute(),
getAMPM(t))
}
func getAMPM(t time.Time) string {
if t.Hour() < 12 {
return "AM"
}
return "PM"
}
// FormatCompact formats in compact form
func FormatCompact(t time.Time) string {
return fmt.Sprintf("%04d%02d%02d_%02d%02d%02d",
t.Year(), t.Month(), t.Day(),
t.Hour(), t.Minute(), t.Second())
}
// FormatWithTimezone formats with timezone info
func FormatWithTimezone(t time.Time) string {
return fmt.Sprintf("%04d-%02d-%02d %02d:%02d:%02d %s",
t.Year(), t.Month(), t.Day(),
t.Hour(), t.Minute(), t.Second(),
t.Format("MST"))
}
// FormatFriendly formats in friendly relative form
func FormatFriendly(t time.Time) string {
now := time.Now()
diff := now.Sub(t)
if diff < time.Minute {
return "just now"
} else if diff < time.Hour {
minutes := int(diff.Minutes())
if minutes == 1 {
return "1 minute ago"
}
return fmt.Sprintf("%d minutes ago", minutes)
} else if diff < 24*time.Hour {
hours := int(diff.Hours())
if hours == 1 {
return "1 hour ago"
}
return fmt.Sprintf("%d hours ago", hours)
} else if diff < 30*24*time.Hour {
days := int(diff.Hours() / 24)
if days == 1 {
return "1 day ago"
}
return fmt.Sprintf("%d days ago", days)
} else {
return FormatISODate(t)
}
}
// 5. Duration Formatting
// FormatDuration formats duration in human-readable form
func FormatDuration(d time.Duration) string {
hours := int(d.Hours())
minutes := int(d.Minutes()) % 60
seconds := int(d.Seconds()) % 60
if hours > 0 {
return fmt.Sprintf("%dh %dm %ds", hours, minutes, seconds)
} else if minutes > 0 {
return fmt.Sprintf("%dm %ds", minutes, seconds)
} else {
return fmt.Sprintf("%ds", seconds)
}
}
// FormatDurationPrecise formats duration with milliseconds
func FormatDurationPrecise(d time.Duration) string {
hours := int(d.Hours())
minutes := int(d.Minutes()) % 60
seconds := int(d.Seconds()) % 60
millis := d.Milliseconds() % 1000
if hours > 0 {
return fmt.Sprintf("%dh %dm %ds %dms", hours, minutes, seconds, millis)
} else if minutes > 0 {
return fmt.Sprintf("%dm %ds %dms", minutes, seconds, millis)
} else {
return fmt.Sprintf("%ds %dms", seconds, millis)
}
}
// 6. Relative Formatting
// FormatRelativeToNow formats datetime relative to now
func FormatRelativeToNow(t time.Time) string {
now := time.Now()
var diff time.Duration
var suffix string
if t.After(now) {
diff = t.Sub(now)
suffix = "from now"
} else {
diff = now.Sub(t)
suffix = "ago"
}
if diff < time.Minute {
seconds := int(diff.Seconds())
if seconds == 1 {
return fmt.Sprintf("1 second %s", suffix)
}
return fmt.Sprintf("%d seconds %s", seconds, suffix)
} else if diff < time.Hour {
minutes := int(diff.Minutes())
if minutes == 1 {
return fmt.Sprintf("1 minute %s", suffix)
}
return fmt.Sprintf("%d minutes %s", minutes, suffix)
} else if diff < 24*time.Hour {
hours := int(diff.Hours())
if hours == 1 {
return fmt.Sprintf("1 hour %s", suffix)
}
return fmt.Sprintf("%d hours %s", hours, suffix)
} else if diff < 30*24*time.Hour {
days := int(diff.Hours() / 24)
if days == 1 {
return fmt.Sprintf("1 day %s", suffix)
}
return fmt.Sprintf("%d days %s", days, suffix)
} else if diff < 365*24*time.Hour {
months := int(diff.Hours() / (24 * 30))
if months == 1 {
return fmt.Sprintf("1 month %s", suffix)
}
return fmt.Sprintf("%d months %s", months, suffix)
} else {
years := int(diff.Hours() / (24 * 365))
if years == 1 {
return fmt.Sprintf("1 year %s", suffix)
}
return fmt.Sprintf("%d years %s", years, suffix)
}
}
// 7. Business Date Formats
// FormatQuarter formats as quarter
func FormatQuarter(t time.Time) string {
quarter := (t.Month()-1)/3 + 1
return fmt.Sprintf("Q%d %d", quarter, t.Year())
}
// FormatWeekNumber formats with week number
func FormatWeekNumber(t time.Time) string {
year, week := t.ISOWeek()
return fmt.Sprintf("%d-W%02d", year, week)
}
// FormatDayOfYear formats with day of year
func FormatDayOfYear(t time.Time) string {
startOfYear := time.Date(t.Year(), 1, 1, 0, 0, 0, 0, t.Location())
dayOfYear := int(t.Sub(startOfYear).Hours()/24) + 1
return fmt.Sprintf("%d-%03d", t.Year(), dayOfYear)
}
// FormatSemester formats as semester
func FormatSemester(t time.Time) string {
semester := 1
if t.Month() >= 7 {
semester = 2
}
return fmt.Sprintf("S%d %d", semester, t.Year())
}
// 8. Custom Pattern Formatting
// FormatWithPattern formats with custom pattern
func FormatWithPattern(t time.Time, pattern string) string {
// Simple pattern replacement
result := pattern
result = fmt.Sprintf(result, t.Year(), t.Month(), t.Day(),
t.Hour(), t.Minute(), t.Second())
return result
}
// FormatDateTime formats datetime with custom format
func FormatDateTime(t time.Time, format string) string {
// Common format placeholders
layouts := map[string]string{
"YYYY-MM-DD": "2006-01-02",
"DD/MM/YYYY": "02/01/2006",
"MM/DD/YYYY": "01/02/2006",
"YYYY-MM-DD HH:MM:SS": "2006-01-02 15:04:05",
"HH:MM": "15:04",
"HH:MM:SS": "15:04:05",
}
if layout, ok := layouts[format]; ok {
return t.Format(layout)
}
return t.Format(format)
}
// 9. Format Codes Reference
// GetAllFormatCodes gets all format codes with examples
func GetAllFormatCodes() map[string]string {
t := time.Date(2025, 12, 31, 14, 30, 45, 0, time.UTC)
return map[string]string{
"ANSIC": t.Format(time.ANSIC),
"UnixDate": t.Format(time.UnixDate),
"RubyDate": t.Format(time.RubyDate),
"RFC822": t.Format(time.RFC822),
"RFC822Z": t.Format(time.RFC822Z),
"RFC850": t.Format(time.RFC850),
"RFC1123": t.Format(time.RFC1123),
"RFC1123Z": t.Format(time.RFC1123Z),
"RFC3339": t.Format(time.RFC3339),
"RFC3339Nano": t.Format(time.RFC3339Nano),
"Kitchen": t.Format(time.Kitchen),
"Stamp": t.Format(time.Stamp),
"StampMilli": t.Format(time.StampMilli),
"StampMicro": t.Format(time.StampMicro),
"StampNano": t.Format(time.StampNano),
}
}
// 10. Special Formats
// FormatLog formats for logging
func FormatLog(t time.Time) string {
return t.Format("2006-01-02 15:04:05.000")
}
// FormatFileSafe formats for filenames
func FormatFileSafe(t time.Time) string {
return fmt.Sprintf("%04d%02d%02d_%02d%02d%02d",
t.Year(), t.Month(), t.Day(),
t.Hour(), t.Minute(), t.Second())
}
// FormatHTTP formats for HTTP headers
func FormatHTTP(t time.Time) string {
return t.Format(time.RFC1123)
}
// Usage Examples
func main() {
fmt.Println("=== Web Go Time Formatting Examples ===
")
now := time.Now()
// 1. Standard formats
fmt.Println("--- 1. Standard Format Codes ---")
fmt.Printf("Month: %v
", FormatMonth(now))
fmt.Printf("Day: %v
", FormatDay(now))
fmt.Printf("Time: %v
", FormatTime(now))
// 2. Common formats
fmt.Println("
--- 2. Common Date Formats ---")
fmt.Printf("ISO 8601: %s
", FormatISO8601(now))
fmt.Printf("RFC 1123: %s
", FormatRFC1123(now))
fmt.Printf("RFC 3339: %s
", FormatRFC3339(now))
// 3. Regional formats
fmt.Println("
--- 3. Regional Formats ---")
fmt.Printf("US: %s
", FormatUSDate(now))
fmt.Printf("EU: %s
", FormatEUDate(now))
fmt.Printf("ISO: %s
", FormatISODate(now))
fmt.Printf("Chinese: %s
", FormatChineseDate(now))
fmt.Printf("Japanese: %s
", FormatJapaneseDate(now))
// 4. Custom formats
fmt.Println("
--- 4. Custom Formats ---")
fmt.Printf("Readable: %s
", FormatReadable(now))
fmt.Printf("Compact: %s
", FormatCompact(now))
fmt.Printf("Friendly: %s
", FormatFriendly(now))
// 5. Duration formatting
fmt.Println("
--- 5. Duration Formatting ---")
fmt.Printf("1h 30m 45s: %s
", FormatDuration(time.Hour+30*time.Minute+45*time.Second))
fmt.Printf("Duration precise: %s
", FormatDurationPrecise(90*time.Minute+12345*time.Millisecond))
// 6. Relative formatting
fmt.Println("
--- 6. Relative Formatting ---")
future := now.Add(2 * time.Hour)
fmt.Printf("2 hours from now: %s
", FormatRelativeToNow(future))
past := now.Add(-24 * time.Hour)
fmt.Printf("1 day ago: %s
", FormatRelativeToNow(past))
// 7. Business formats
fmt.Println("
--- 7. Business Date Formats ---")
fmt.Printf("Quarter: %s
", FormatQuarter(now))
fmt.Printf("Week: %s
", FormatWeekNumber(now))
fmt.Printf("Day of year: %s
", FormatDayOfYear(now))
fmt.Printf("Semester: %s
", FormatSemester(now))
// 8. Format codes reference
fmt.Println("
--- 8. Format Codes Reference ---")
codes := GetAllFormatCodes()
for name, example := range codes {
fmt.Printf("%s: %s
", name, example)
}
// 9. Special formats
fmt.Println("
--- 9. Special Formats ---")
fmt.Printf("Log: %s
", FormatLog(now))
fmt.Printf("File safe: %s
", FormatFileSafe(now))
fmt.Printf("HTTP: %s
", FormatHTTP(now))
fmt.Println("
=== All Time Formatting Examples Completed ===")
}
💻 Analyse de l'Heure go
🟡 intermediate
⭐⭐⭐
Analyser les chaînes en objets time.Time en utilisant divers formats et gérer les erreurs d'analyse
⏱️ 25 min
🏷️ go, web, datetime, parsing
Prerequisites:
Intermediate Go, time package, parse layouts
// Web Go Time Parsing Examples
// Converting strings to time.Time objects with various formats
package main
import (
"fmt"
"strings"
"time"
)
// 1. Basic Parsing
// ParseISO8601 parses ISO 8601 format
func ParseISO8601(dateString string) (time.Time, error) {
return time.Parse(time.RFC3339, dateString)
}
// ParseRFC1123 parses RFC 1123 format
func ParseRFC1123(dateString string) (time.Time, error) {
return time.Parse(time.RFC1123, dateString)
}
// ParseRFC3339 parses RFC 3339 format
func ParseRFC3339(dateString string) (time.Time, error) {
return time.Parse(time.RFC3339, dateString)
}
// ParseCustomFormat parses using custom format
func ParseCustomFormat(dateString, layout string) (time.Time, error) {
return time.Parse(layout, dateString)
}
// 2. Common Format Parsing
// ParseUSDate parses US date (MM/DD/YYYY)
func ParseUSDate(dateString string) (time.Time, error) {
layouts := []string{
"01/02/2006",
"01/02/2006 15:04:05",
"01-02-2006",
"01-02-2006 15:04:05",
}
for _, layout := range layouts {
t, err := time.Parse(layout, dateString)
if err == nil {
return t, nil
}
}
return time.Time{}, fmt.Errorf("cannot parse date: %s", dateString)
}
// ParseEUDate parses European date (DD/MM/YYYY)
func ParseEUDate(dateString string) (time.Time, error) {
layouts := []string{
"02/01/2006",
"02/01/2006 15:04:05",
"02-01-2006",
"02-01-2006 15:04:05",
}
for _, layout := range layouts {
t, err := time.Parse(layout, dateString)
if err == nil {
return t, nil
}
}
return time.Time{}, fmt.Errorf("cannot parse date: %s", dateString)
}
// ParseISODate parses ISO date (YYYY-MM-DD)
func ParseISODate(dateString string) (time.Time, error) {
layouts := []string{
"2006-01-02",
"2006-01-02 15:04:05",
"2006-01-02T15:04:05",
"2006-01-02T15:04:05Z",
"20060102",
}
for _, layout := range layouts {
t, err := time.Parse(layout, dateString)
if err == nil {
return t, nil
}
}
return time.Time{}, fmt.Errorf("cannot parse date: %s", dateString)
}
// 3. Flexible Parsing
// ParseAuto auto-detects and parses format
func ParseAuto(dateString string) (time.Time, error) {
// Try common layouts in order
layouts := []string{
time.RFC3339,
time.RFC1123,
time.RFC822,
time.RFC850,
time.ANSIC,
time.UnixDate,
"2006-01-02 15:04:05",
"2006-01-02T15:04:05",
"2006-01-02",
"02/01/2006",
"01/02/2006",
"02.01.2006",
"01.02.2006",
"02 Jan 2006",
"02 January 2006",
"Jan 2, 2006",
"January 2, 2006",
"20060102",
"02/01/06",
"01/02/06",
}
for _, layout := range layouts {
t, err := time.Parse(layout, dateString)
if err == nil {
return t, nil
}
}
return time.Time{}, fmt.Errorf("cannot parse date with any known format: %s", dateString)
}
// ParseAutoList parses and returns all possible interpretations
func ParseAutoList(dateString string) []time.Time {
var results []time.Time
layouts := []string{
time.RFC3339,
"2006-01-02 15:04:05",
"2006-01-02",
"02/01/2006",
"01/02/2006",
"02.01.2006",
"01.02.2006",
}
seen := make(map[string]bool)
for _, layout := range layouts {
t, err := time.Parse(layout, dateString)
if err == nil {
key := t.String()
if !seen[key] {
seen[key] = true
results = append(results, t)
}
}
}
return results
}
// 4. Time Parsing
// ParseTime parses time string
func ParseTime(timeString string) (time.Time, error) {
layouts := []string{
"15:04:05",
"15:04",
"3:04:05 PM",
"3:04 PM",
"15:04:05.000",
"3:04:05.000 PM",
}
for _, layout := range layouts {
t, err := time.Parse(layout, timeString)
if err == nil {
return t, nil
}
}
return time.Time{}, fmt.Errorf("cannot parse time: %s", timeString)
}
// ParseTimestamp parses Unix timestamp
func ParseTimestamp(timestamp int64) time.Time {
return time.Unix(timestamp, 0)
}
// ParseTimestampMillis parses millisecond timestamp
func ParseTimestampMillis(timestamp int64) time.Time {
return time.Unix(timestamp/1000, (timestamp%1000)*1000000)
}
// ParseTimestampNanos parses nanosecond timestamp
func ParseTimestampNanos(timestamp int64) time.Time {
sec := timestamp / 1000000000
nsec := timestamp % 1000000000
return time.Unix(sec, nsec)
}
// 5. Relative Time Parsing
// ParseRelative parses relative time strings
func ParseRelative(relativeString string) (time.Time, error) {
now := time.Now()
lower := strings.ToLower(relativeString)
// Match patterns like "in 5 minutes", "2 hours ago", etc.
if strings.Contains(lower, "ago") {
// Past
if strings.Contains(lower, "second") {
return now, fmt.Errorf("use specific number")
} else if strings.Contains(lower, "minute") {
// Parse "X minutes ago"
var minutes int
fmt.Sscanf(relativeString, "%d", &minutes)
return now.Add(-time.Duration(minutes) * time.Minute), nil
} else if strings.Contains(lower, "hour") {
var hours int
fmt.Sscanf(relativeString, "%d", &hours)
return now.Add(-time.Duration(hours) * time.Hour), nil
} else if strings.Contains(lower, "day") {
var days int
fmt.Sscanf(relativeString, "%d", &days)
return now.AddDate(0, 0, -days), nil
}
} else if strings.Contains(lower, "in ") {
// Future
if strings.Contains(lower, "minute") {
var minutes int
fmt.Sscanf(relativeString, "in %d", &minutes)
return now.Add(time.Duration(minutes) * time.Minute), nil
} else if strings.Contains(lower, "hour") {
var hours int
fmt.Sscanf(relativeString, "in %d", &hours)
return now.Add(time.Duration(hours) * time.Hour), nil
} else if strings.Contains(lower, "day") {
var days int
fmt.Sscanf(relativeString, "in %d", &days)
return now.AddDate(0, 0, days), nil
}
}
return time.Time{}, fmt.Errorf("cannot parse relative time: %s", relativeString)
}
// 6. Multi-Format Parsing
// TryMultipleFormats tries multiple formats
func TryMultipleFormats(dateString string, layouts []string) (time.Time, error) {
for _, layout := range layouts {
t, err := time.Parse(layout, dateString)
if err == nil {
return t, nil
}
}
return time.Time{}, fmt.Errorf("none of the formats matched")
}
// 7. Parser with Fallback
// ParseWithFallback parses with fallback on failure
func ParseWithFallback(dateString string, fallback time.Time) time.Time {
t, err := ParseAuto(dateString)
if err != nil {
return fallback
}
return t
}
// 8. Validation
// IsValidDate validates date string against format
func IsValidDate(dateString, layout string) bool {
_, err := time.Parse(layout, dateString)
return err == nil
}
// GetDetectedFormat detects which format matches
func GetDetectedFormat(dateString string) string {
layouts := map[string]string{
"ISO 8601": "2006-01-02",
"US Date": "01/02/2006",
"EU Date": "02/01/2006",
"RFC 3339": time.RFC3339,
"RFC 1123": time.RFC1123,
"Custom Date": "02-Jan-2006",
}
for name, layout := range layouts {
if IsValidDate(dateString, layout) {
return name
}
}
return "Unknown"
}
// 9. Extract Date Parts
// ExtractDateParts extracts date parts using string manipulation
func ExtractDateParts(dateString string) map[string]int {
// Try ISO format first
var year, month, day int
if dateString[4] == '-' && dateString[7] == '-' {
fmt.Sscanf(dateString, "%d-%d-%d", &year, &month, &day)
return map[string]int{
"year": year,
"month": month,
"day": day,
}
}
// Try US format
if dateString[2] == '/' && dateString[5] == '/' {
fmt.Sscanf(dateString, "%d/%d/%d", &month, &day, &year)
return map[string]int{
"year": year,
"month": month,
"day": day,
}
}
// Try EU format
if dateString[2] == '/' && dateString[5] == '/' {
fmt.Sscanf(dateString, "%d/%d/%d", &day, &month, &year)
return map[string]int{
"year": year,
"month": month,
"day": day,
}
}
return nil
}
// 10. Specialized Parsers
// ParseHTTPDate parses HTTP date format
func ParseHTTPDate(dateString string) (time.Time, error) {
return time.Parse(time.RFC1123, dateString)
}
// ParseCookieDate parses cookie date format
func ParseCookieDate(dateString string) (time.Time, error) {
layouts := []string{
time.RFC1123,
"Monday, 02-Jan-2006 15:04:05 MST",
"Mon, 02-Jan-2006 15:04:05 MST",
}
return TryMultipleFormats(dateString, layouts)
}
// ParseEmailDate parses email date format
func ParseEmailDate(dateString string) (time.Time, error) {
return time.Parse(time.RFC1123, dateString)
}
// ParseLogFileDate parses log file timestamp
func ParseLogFileDate(dateString string) (time.Time, error) {
layouts := []string{
"2006/01/02 15:04:05",
"2006-01-02 15:04:05",
"2006.01.02 15:04:05",
"01/02/2006 15:04:05",
"02-Jan-06 15:04:05",
}
return TryMultipleFormats(dateString, layouts)
}
// 11. Locale-Specific Parsing
// ParseGermanDate parses German date format
func ParseGermanDate(dateString string) (time.Time, error) {
layouts := []string{
"02.01.2006",
"02.01.06",
"2.1.2006",
"2.1.06",
}
return TryMultipleFormats(dateString, layouts)
}
// ParseFrenchDate parses French date format
func ParseFrenchDate(dateString string) (time.Time, error) {
layouts := []string{
"02/01/2006",
"02-01-2006",
}
return TryMultipleFormats(dateString, layouts)
}
// ParseJapaneseDate parses Japanese date format
func ParseJapaneseDate(dateString string) (time.Time, error) {
layouts := []string{
"2006年01月02日",
"2006/01/02",
}
return TryMultipleFormats(dateString, layouts)
}
// Usage Examples
func main() {
fmt.Println("=== Web Go Time Parsing Examples ===
")
// 1. Basic parsing
fmt.Println("--- 1. Basic Parsing ---")
isoTime := "2025-12-31T14:30:45Z"
if t, err := ParseISO8601(isoTime); err == nil {
fmt.Printf("ISO 8601: %v
", t)
}
// 2. Common formats
fmt.Println("
--- 2. Common Format Parsing ---")
usDate := "12/31/2025"
if t, err := ParseUSDate(usDate); err == nil {
fmt.Printf("US date: %v
", t)
}
euDate := "31/12/2025"
if t, err := ParseEUDate(euDate); err == nil {
fmt.Printf("EU date: %v
", t)
}
isoDate := "2025-12-31"
if t, err := ParseISODate(isoDate); err == nil {
fmt.Printf("ISO date: %v
", t)
}
// 3. Auto-detect
fmt.Println("
--- 3. Auto-Detection ---")
testDates := []string{
"2025-12-31",
"31/12/2025",
"12/31/2025",
"Dec 31, 2025",
}
for _, date := range testDates {
if t, err := ParseAuto(date); err == nil {
fmt.Printf("'%s' -> %v
", date, t)
}
}
// 4. Time parsing
fmt.Println("
--- 4. Time Parsing ---")
times := []string{"14:30:45", "2:30 PM", "14:30"}
for _, t := range times {
if parsed, err := ParseTime(t); err == nil {
fmt.Printf("'%s' -> %v
", t, parsed)
}
}
// 5. Timestamp parsing
fmt.Println("
--- 5. Timestamp Parsing ---")
ts := int64(1735667445)
fmt.Printf("Timestamp %d: %v
", ts, ParseTimestamp(ts))
// 6. Format detection
fmt.Println("
--- 6. Format Detection ---")
fmt.Printf("Detected format for '2025-12-31': %s
", GetDetectedFormat("2025-12-31"))
fmt.Printf("Detected format for '12/31/2025': %s
", GetDetectedFormat("12/31/2025"))
// 7. Extract parts
fmt.Println("
--- 7. Extract Date Parts ---")
parts := ExtractDateParts("2025-12-31")
fmt.Printf("Parts: %v
", parts)
// 8. Multi-format parsing
fmt.Println("
--- 8. Try Multiple Formats ---")
layouts := []string{"2006-01-02", "02/01/2006", "01/02/2006"}
if t, err := TryMultipleFormats("2025-12-31", layouts); err == nil {
fmt.Printf("Parsed: %v
", t)
}
// 9. Locale-specific
fmt.Println("
--- 9. Locale-Specific Parsing ---")
german := "31.12.2025"
if t, err := ParseGermanDate(german); err == nil {
fmt.Printf("German: %v
", t)
}
japanese := "2025年12月31日"
if t, err := ParseJapaneseDate(japanese); err == nil {
fmt.Printf("Japanese: %v
", t)
}
// 10. Specialized formats
fmt.Println("
--- 10. Specialized Formats ---")
httpDate := "Wed, 31 Dec 2025 14:30:45 GMT"
if t, err := ParseHTTPDate(httpDate); err == nil {
fmt.Printf("HTTP date: %v
", t)
}
logDate := "2025/12/31 14:30:45"
if t, err := ParseLogFileDate(logDate); err == nil {
fmt.Printf("Log date: %v
", t)
}
fmt.Println("
=== All Time Parsing Examples Completed ===")
}