package datetime import ( "time" ) var ( // Fuseau horaire par défaut DefaultTZ = time.Local // Jours de la semaine (format court) shortDays = []string{ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", } // Jours de la semaine (format long) longDays = []string{ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", } // Mois (format court) shortMonths = []string{ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", } // Mois (format long) longMonths = []string{ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", } formatters = map[rune]func(time.Time) string{ // Jour 'j': format_j, // Jour du mois sans les 0 initiaux (1-31) 'd': format_d, // Jour du mois, sur deux chiffres (avec un 0 initial) (01-31) 'N': format_N, // Représentation numérique ISO 8601 du jour de la semaine (1-7) 'w': format_w, // Jour de la semaine au format numérique (0-6) 'z': format_z, // Jour de l’année (0-365) 'D': format_D, // Jour de la semaine, en 3 lettres (Mon-Sun) 'l': format_l, // Jour de la semaine, textuel, version longue (Monday-Sunday) // Semaine 'W': format_W, // N° de semaine dans l’année ISO 8601, les semaines commencent le lundi (0-53) // Mois 'n': format_n, // Mois sans les 0 initiaux (1-12) 'm': format_m, // Mois au format numérique, avec 0 initiaux (01-12) 't': format_t, // Nombre de jours dans le mois (28-31) 'M': format_M, // Mois, en trois lettres (Jan-Dec) 'F': format_F, // Mois, textuel, version longue (January-December) // Année 'y': format_y, // Année sur 2 chiffres (Exemples : 99 ou 03) 'Y': format_Y, // Année sur au moins 4 chiffres, avec - pour les années av. J.-C. (Exemples : -0055, 0787, 1999, 2003, 10191) 'L': format_L, // Est ce que l’année est bissextile (1 si bissextile, 0 sinon) // Heure 'a': format_a, // Ante meridiem et Post meridiem en minuscules (am ou pm) 'A': format_A, // Ante meridiem et Post meridiem en majuscules (AM ou PM) 'B': format_B, // Heure Internet Swatch (000-999) 'g': format_g, // Heure, au format 12h, sans les 0 initiaux (1-12) 'G': format_G, // Heure, au format 24h, sans les 0 initiaux (0-23) 'h': format_h, // Heure, au format 12h, avec les 0 initiaux (01-12) 'H': format_H, // Heure, au format 24h, avec les 0 initiaux (00-23) 'i': format_i, // Minutes avec les 0 initiaux (00-59) 's': format_s, // Secondes avec les 0 initiaux (00-59) 'v': format_v, // Nillisecondes avec les 0 initiaux (000-999) 'u': format_u, // Microsecondes avec les 0 initiaux (000000-999999) // Fuseau horaire 'T': format_T, // Abréviation du fuseau horaire, si connu ; sinon décalage depuis GMT (Exemples : EST, MDT, +05) 'e': format_e, // L’identifiant du fuseau horaire (Exemples : UTC, GMT, Atlantic/Azores) 'I': format_I, // L’heure d’été est activée ou pas (1 si oui, 0 sinon) 'O': format_O, // Différence d’heures avec l’heure de Greenwich (GMT), sans deux-points entre les heures et les minutes (Exemple : +0200) 'P': format_P, // Différence d’heures avec l’heure de Greenwich (GMT), avec deux-points entre les heures et les minutes (Exemple : +02:00) 'p': format_p, // Identique à P, mais retourne Z au lieu de +00:00 'Z': format_Z, // Décalage horaire en secondes. Le décalage des zones à l’ouest de la zone UTC est négatif, et à l’est, il est positif.(-43200 à 50400) // Date et heure complète 'c': format_c, // Date au format ISO 8601 (2004-02-12T15:19:21+00:00) 'r': format_r, // Date au format RFC 5322 (Thu, 21 Dec 2000 16:01:070200) 'U': format_U, // Secondes depuis l’époque Unix (1er Janvier 1970, 0h00 00s GMT) } parsers = map[rune]string{ // Jours 'j': "2", // Jour du mois sans les 0 initiaux (1-31) 'd': "02", // Jour du mois, sur deux chiffres (avec un 0 initial) (01-31) 'D': "Mon", // Jour de la semaine, en 3 lettres (Mon-Sun) 'l': "Monday", // Jour de la semaine, textuel, version longue (Monday-Sunday) // Mois 'n': "1", // Mois sans les 0 initiaux (1-12) 'm': "01", // Mois au format numérique, avec 0 initiaux (01-12) 'M': "Jan", // Mois, en trois lettres (Jan-Dec) 'F': "January", // Mois, textuel, version longue (January-December) // Année 'y': "06", // Année sur 2 chiffres (Exemples : 99 ou 03) 'Y': "2006", // Année sur au moins 4 chiffres, avec - pour les années av. J.-C. (Exemples : -0055, 0787, 1999, 2003, 10191) // Heure 'a': "pm", // Ante meridiem et Post meridiem en minuscules (am ou pm) 'A': "PM", // Ante meridiem et Post meridiem en majuscules (AM ou PM) 'g': "3", // Heure, au format 12h, sans les 0 initiaux (1-12) 'h': "03", // Heure, au format 12h, avec les 0 initiaux (01-12) 'H': "15", // Heure, au format 24h, avec les 0 initiaux (00-23) 'i': "04", // Minutes avec les 0 initiaux (00-59) 's': "05", // Secondes avec les 0 initiaux (00-59) // Fuseau horaire 'T': "MST", // Abréviation du fuseau horaire, si connu ; sinon décalage depuis GMT (Exemples : EST, MDT, +05) 'O': "-0700", // Différence d’heures avec l’heure de Greenwich (GMT), sans deux-points entre les heures et les minutes (Exemple : +0200) 'P': "-07:00", // Différence d’heures avec l’heure de Greenwich (GMT), avec deux-points entre les heures et les minutes (Exemple : +02:00) // Date et heure complète 'c': "2006-01-02T15:04:05-07:00", // Date au format ISO 8601 (2004-02-12T15:19:21+00:00) 'r': "Thu, 21 Dec 2000 16:01:07 +0200", // Date au format RFC 5322 (Thu, 21 Dec 2000 16:01:070200) } layouts = []string{ DayDateTimeLayout, DateTimeLayout, DateTimeNanoLayout, ShortDateTimeLayout, ShortDateTimeNanoLayout, DateLayout, DateNanoLayout, ShortDateLayout, ShortDateNanoLayout, ISO8601Layout, ISO8601NanoLayout, RFC822Layout, RFC822ZLayout, RFC850Layout, RFC1123Layout, RFC1123ZLayout, RFC3339Layout, RFC3339NanoLayout, RFC1036Layout, RFC7231Layout, KitchenLayout, CookieLayout, ANSICLayout, UnixDateLayout, RubyDateLayout, "2006", "2006-1", "2006-1-2", "2006-1-2 15", "2006-1-2 15:4", "2006-1-2 15:4:5", "2006-1-2 15:4:5.999999999", "2006.1", "2006.1.2", "2006.1.2 15", "2006.1.2 15:4", "2006.1.2 15:4:5", "2006.1.2 15:4:5.999999999", "2006/1", "2006/1/2", "2006/1/2 15", "2006/1/2 15:4", "2006/1/2 15:4:5", "2006/1/2 15:4:5.999999999", "2006-01-02 15:04:05PM MST", "2006-01-02 15:04:05.999999999PM MST", "2006-1-2 15:4:5PM MST", "2006-1-2 15:4:5.999999999PM MST", "2006-01-02 15:04:05 PM MST", "2006-01-02 15:04:05.999999999 PM MST", "2006-1-2 15:4:5 PM MST", "2006-1-2 15:4:5.999999999 PM MST", "1/2/2006", "1/2/2006 15", "1/2/2006 15:4", "1/2/2006 15:4:5", "1/2/2006 15:4:5.999999999", "2006-1-2 15:4:5 -0700 MST", "2006-1-2 15:4:5.999999999 -0700 MST", "2006-1-2T15:4:5Z07", "2006-1-2T15:4:5.999999999Z07", "2006-1-2T15:4:5Z07:00", "2006-1-2T15:4:5.999999999Z07:00", "2006-1-2T15:4:5-07:00", "2006-1-2T15:4:5.999999999-07:00", "20060102150405-07:00", "20060102150405.999999999-07:00", "20060102150405Z07", "20060102150405.999999999Z07", "20060102150405Z07:00", "20060102150405.999999999Z07:00", } ) const ( // Unités de durée Nanosecond = time.Nanosecond Microsecond = time.Microsecond Millisecond = time.Millisecond Second = time.Second Minute = time.Minute Hour = time.Hour Day = time.Hour * 24 Week = Day * 7 MonthsPerYear = 12 DaysPerWeek = 7 HoursPerDay = 24 HoursPerWeek = HoursPerDay * DaysPerWeek MinutesPerHour = 60 MinutesPerDay = MinutesPerHour * HoursPerDay MinutesPerWeek = MinutesPerHour * HoursPerWeek SecondsPerMinute = 60 SecondsPerHour = SecondsPerMinute * MinutesPerHour SecondsPerDay = SecondsPerMinute * MinutesPerDay SecondsPerWeek = SecondsPerMinute * MinutesPerWeek // Erreurs errInvalidTZ = "Invalid timezone %q" errInvalidValue = "Cannot parse string %q as datetime, please make sure the value is valid" // Quelques layouts ANSICLayout = time.ANSIC UnixDateLayout = time.UnixDate RubyDateLayout = time.RubyDate RFC822Layout = time.RFC822 RFC822ZLayout = time.RFC822Z RFC850Layout = time.RFC850 RFC1123Layout = time.RFC1123 RFC1123ZLayout = time.RFC1123Z RssLayout = time.RFC1123Z KitchenLayout = time.Kitchen RFC2822Layout = time.RFC1123Z CookieLayout = "Monday, 02-Jan-2006 15:04:05 MST" RFC3339Layout = "2006-01-02T15:04:05Z07:00" RFC3339MilliLayout = "2006-01-02T15:04:05.999Z07:00" RFC3339MicroLayout = "2006-01-02T15:04:05.999999Z07:00" RFC3339NanoLayout = "2006-01-02T15:04:05.999999999Z07:00" ISO8601Layout = "2006-01-02T15:04:05-07:00" ISO8601MilliLayout = "2006-01-02T15:04:05.999-07:00" ISO8601MicroLayout = "2006-01-02T15:04:05.999999-07:00" ISO8601NanoLayout = "2006-01-02T15:04:05.999999999-07:00" RFC1036Layout = "Mon, 02 Jan 06 15:04:05 -0700" RFC7231Layout = "Mon, 02 Jan 2006 15:04:05 MST" DayDateTimeLayout = "Mon, Jan 2, 2006 3:04 PM" DateTimeLayout = "2006-01-02 15:04:05" DateTimeMilliLayout = "2006-01-02 15:04:05.999" DateTimeMicroLayout = "2006-01-02 15:04:05.999999" DateTimeNanoLayout = "2006-01-02 15:04:05.999999999" ShortDateTimeLayout = "20060102150405" ShortDateTimeMilliLayout = "20060102150405.999" ShortDateTimeMicroLayout = "20060102150405.999999" ShortDateTimeNanoLayout = "20060102150405.999999999" DateLayout = "2006-01-02" DateMilliLayout = "2006-01-02.999" DateMicroLayout = "2006-01-02.999999" DateNanoLayout = "2006-01-02.999999999" ShortDateLayout = "20060102" ShortDateMilliLayout = "20060102.999" ShortDateMicroLayout = "20060102.999999" ShortDateNanoLayout = "20060102.999999999" TimeLayout = "15:04:05" TimeMilliLayout = "15:04:05.999" TimeMicroLayout = "15:04:05.999999" TimeNanoLayout = "15:04:05.999999999" ShortTimeLayout = "150405" ShortTimeMilliLayout = "150405.999" ShortTimeMicroLayout = "150405.999999" ShortTimeNanoLayout = "150405.999999999" )