diff options
Diffstat (limited to 'src/pkg/time/time.go')
| -rw-r--r-- | src/pkg/time/time.go | 272 |
1 files changed, 136 insertions, 136 deletions
diff --git a/src/pkg/time/time.go b/src/pkg/time/time.go index 1418d521e..e41ca2dc6 100644 --- a/src/pkg/time/time.go +++ b/src/pkg/time/time.go @@ -7,48 +7,48 @@ package time import ( - "os"; + "os" ) // Seconds reports the number of seconds since the Unix epoch, // January 1, 1970 00:00:00 UTC. func Seconds() int64 { - sec, _, err := os.Time(); + sec, _, err := os.Time() if err != nil { panic("time: os.Time: ", err.String()) } - return sec; + return sec } // Nanoseconds reports the number of nanoseconds since the Unix epoch, // January 1, 1970 00:00:00 UTC. func Nanoseconds() int64 { - sec, nsec, err := os.Time(); + sec, nsec, err := os.Time() if err != nil { panic("time: os.Time: ", err.String()) } - return sec*1e9 + nsec; + return sec*1e9 + nsec } // Days of the week. const ( - Sunday = iota; - Monday; - Tuesday; - Wednesday; - Thursday; - Friday; - Saturday; + Sunday = iota + Monday + Tuesday + Wednesday + Thursday + Friday + Saturday ) // Time is the struct representing a parsed time value. type Time struct { - Year int64; // 2008 is 2008 - Month, Day int; // Sep-17 is 9, 17 - Hour, Minute, Second int; // 10:43:12 is 10, 43, 12 - Weekday int; // Sunday, Monday, ... - ZoneOffset int; // seconds east of UTC - Zone string; + Year int64 // 2008 is 2008 + Month, Day int // Sep-17 is 9, 17 + Hour, Minute, Second int // 10:43:12 is 10, 43, 12 + Weekday int // Sunday, Monday, ... + ZoneOffset int // seconds east of UTC + Zone string } var nonleapyear = []int{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} @@ -58,37 +58,37 @@ func months(year int64) []int { if year%4 == 0 && (year%100 != 0 || year%400 == 0) { return leapyear } - return nonleapyear; + return nonleapyear } const ( - secondsPerDay = 24 * 60 * 60; - daysPer400Years = 365*400 + 97; - daysPer100Years = 365*100 + 24; - daysPer4Years = 365*4 + 1; - days1970To2001 = 31*365 + 8; + secondsPerDay = 24 * 60 * 60 + daysPer400Years = 365*400 + 97 + daysPer100Years = 365*100 + 24 + daysPer4Years = 365*4 + 1 + days1970To2001 = 31*365 + 8 ) // SecondsToUTC converts sec, in number of seconds since the Unix epoch, // into a parsed Time value in the UTC time zone. func SecondsToUTC(sec int64) *Time { - t := new(Time); + t := new(Time) // Split into time and day. - day := sec / secondsPerDay; - sec -= day * secondsPerDay; + day := sec / secondsPerDay + sec -= day * secondsPerDay if sec < 0 { - day--; - sec += secondsPerDay; + day-- + sec += secondsPerDay } // Time - t.Hour = int(sec / 3600); - t.Minute = int((sec / 60) % 60); - t.Second = int(sec % 60); + t.Hour = int(sec / 3600) + t.Minute = int((sec / 60) % 60) + t.Second = int(sec % 60) // Day 0 = January 1, 1970 was a Thursday - t.Weekday = int((day + Thursday) % 7); + t.Weekday = int((day + Thursday) % 7) if t.Weekday < 0 { t.Weekday += 7 } @@ -96,78 +96,78 @@ func SecondsToUTC(sec int64) *Time { // Change day from 0 = 1970 to 0 = 2001, // to make leap year calculations easier // (2001 begins 4-, 100-, and 400-year cycles ending in a leap year.) - day -= days1970To2001; + day -= days1970To2001 - year := int64(2001); + year := int64(2001) if day < 0 { // Go back enough 400 year cycles to make day positive. - n := -day/daysPer400Years + 1; - year -= 400 * n; - day += daysPer400Years * n; + n := -day/daysPer400Years + 1 + year -= 400 * n + day += daysPer400Years * n } // Cut off 400 year cycles. - n := day / daysPer400Years; - year += 400 * n; - day -= daysPer400Years * n; + n := day / daysPer400Years + year += 400 * n + day -= daysPer400Years * n // Cut off 100-year cycles - n = day / daysPer100Years; - if n > 3 { // happens on last day of 400th year + n = day / daysPer100Years + if n > 3 { // happens on last day of 400th year n = 3 } - year += 100 * n; - day -= daysPer100Years * n; + year += 100 * n + day -= daysPer100Years * n // Cut off 4-year cycles - n = day / daysPer4Years; - if n > 24 { // happens on last day of 100th year + n = day / daysPer4Years + if n > 24 { // happens on last day of 100th year n = 24 } - year += 4 * n; - day -= daysPer4Years * n; + year += 4 * n + day -= daysPer4Years * n // Cut off non-leap years. - n = day / 365; - if n > 3 { // happens on last day of 4th year + n = day / 365 + if n > 3 { // happens on last day of 4th year n = 3 } - year += n; - day -= 365 * n; + year += n + day -= 365 * n - t.Year = year; + t.Year = year // If someone ever needs yearday, // tyearday = day (+1?) - months := months(year); - var m int; - yday := int(day); + months := months(year) + var m int + yday := int(day) for m = 0; m < 12 && yday >= months[m]; m++ { yday -= months[m] } - t.Month = m + 1; - t.Day = yday + 1; - t.Zone = "UTC"; + t.Month = m + 1 + t.Day = yday + 1 + t.Zone = "UTC" - return t; + return t } // UTC returns the current time as a parsed Time value in the UTC time zone. -func UTC() *Time { return SecondsToUTC(Seconds()) } +func UTC() *Time { return SecondsToUTC(Seconds()) } // SecondsToLocalTime converts sec, in number of seconds since the Unix epoch, // into a parsed Time value in the local time zone. func SecondsToLocalTime(sec int64) *Time { - z, offset := lookupTimezone(sec); - t := SecondsToUTC(sec + int64(offset)); - t.Zone = z; - t.ZoneOffset = offset; - return t; + z, offset := lookupTimezone(sec) + t := SecondsToUTC(sec + int64(offset)) + t.Zone = z + t.ZoneOffset = offset + return t } // LocalTime returns the current time as a parsed Time value in the local time zone. -func LocalTime() *Time { return SecondsToLocalTime(Seconds()) } +func LocalTime() *Time { return SecondsToLocalTime(Seconds()) } // Seconds returns the number of seconds since January 1, 1970 represented by the // parsed Time value. @@ -176,56 +176,56 @@ func (t *Time) Seconds() int64 { // Using 2001 instead of 1970 makes the leap-year // handling easier (see SecondsToUTC), because // it is at the beginning of the 4-, 100-, and 400-year cycles. - day := int64(0); + day := int64(0) // Rewrite year to be >= 2001. - year := t.Year; + year := t.Year if year < 2001 { - n := (2001-year)/400 + 1; - year += 400 * n; - day -= daysPer400Years * n; + n := (2001-year)/400 + 1 + year += 400 * n + day -= daysPer400Years * n } // Add in days from 400-year cycles. - n := (year - 2001) / 400; - year -= 400 * n; - day += daysPer400Years * n; + n := (year - 2001) / 400 + year -= 400 * n + day += daysPer400Years * n // Add in 100-year cycles. - n = (year - 2001) / 100; - year -= 100 * n; - day += daysPer100Years * n; + n = (year - 2001) / 100 + year -= 100 * n + day += daysPer100Years * n // Add in 4-year cycles. - n = (year - 2001) / 4; - year -= 4 * n; - day += daysPer4Years * n; + n = (year - 2001) / 4 + year -= 4 * n + day += daysPer4Years * n // Add in non-leap years. - n = year - 2001; - day += 365 * n; + n = year - 2001 + day += 365 * n // Add in days this year. - months := months(t.Year); + months := months(t.Year) for m := 0; m < t.Month-1; m++ { day += int64(months[m]) } - day += int64(t.Day - 1); + day += int64(t.Day - 1) // Convert days to seconds since January 1, 2001. - sec := day * secondsPerDay; + sec := day * secondsPerDay // Add in time elapsed today. - sec += int64(t.Hour) * 3600; - sec += int64(t.Minute) * 60; - sec += int64(t.Second); + sec += int64(t.Hour) * 3600 + sec += int64(t.Minute) * 60 + sec += int64(t.Second) // Convert from seconds since 2001 to seconds since 1970. - sec += days1970To2001 * secondsPerDay; + sec += days1970To2001 * secondsPerDay // Account for local time zone. - sec -= int64(t.ZoneOffset); - return sec; + sec -= int64(t.ZoneOffset) + return sec } var longDayNames = []string{ @@ -275,86 +275,86 @@ func decimal(dst []byte, n int) { n = 0 } for i := len(dst) - 1; i >= 0; i-- { - dst[i] = byte(n%10 + '0'); - n /= 10; + dst[i] = byte(n%10 + '0') + n /= 10 } } func addString(buf []byte, bp int, s string) int { - n := len(s); - copy(buf[bp:bp+n], s); - return bp + n; + n := len(s) + copy(buf[bp:bp+n], s) + return bp + n } // Just enough of strftime to implement the date formats below. // Not exported. func format(t *Time, fmt string) string { - buf := make([]byte, 128); - bp := 0; + buf := make([]byte, 128) + bp := 0 for i := 0; i < len(fmt); i++ { if fmt[i] == '%' { - i++; + i++ switch fmt[i] { - case 'A': // %A full weekday name + case 'A': // %A full weekday name bp = addString(buf, bp, longDayNames[t.Weekday]) - case 'a': // %a abbreviated weekday name + case 'a': // %a abbreviated weekday name bp = addString(buf, bp, shortDayNames[t.Weekday]) - case 'b': // %b abbreviated month name + case 'b': // %b abbreviated month name bp = addString(buf, bp, shortMonthNames[t.Month]) - case 'd': // %d day of month (01-31) - decimal(buf[bp:bp+2], t.Day); - bp += 2; - case 'e': // %e day of month ( 1-31) + case 'd': // %d day of month (01-31) + decimal(buf[bp:bp+2], t.Day) + bp += 2 + case 'e': // %e day of month ( 1-31) if t.Day >= 10 { decimal(buf[bp:bp+2], t.Day) } else { - buf[bp] = ' '; - buf[bp+1] = byte(t.Day + '0'); + buf[bp] = ' ' + buf[bp+1] = byte(t.Day + '0') } - bp += 2; - case 'H': // %H hour 00-23 - decimal(buf[bp:bp+2], t.Hour); - bp += 2; - case 'M': // %M minute 00-59 - decimal(buf[bp:bp+2], t.Minute); - bp += 2; - case 'S': // %S second 00-59 - decimal(buf[bp:bp+2], t.Second); - bp += 2; - case 'Y': // %Y year 2008 - decimal(buf[bp:bp+4], int(t.Year)); - bp += 4; - case 'y': // %y year 08 - decimal(buf[bp:bp+2], int(t.Year%100)); - bp += 2; + bp += 2 + case 'H': // %H hour 00-23 + decimal(buf[bp:bp+2], t.Hour) + bp += 2 + case 'M': // %M minute 00-59 + decimal(buf[bp:bp+2], t.Minute) + bp += 2 + case 'S': // %S second 00-59 + decimal(buf[bp:bp+2], t.Second) + bp += 2 + case 'Y': // %Y year 2008 + decimal(buf[bp:bp+4], int(t.Year)) + bp += 4 + case 'y': // %y year 08 + decimal(buf[bp:bp+2], int(t.Year%100)) + bp += 2 case 'Z': bp = addString(buf, bp, t.Zone) default: - buf[bp] = '%'; - buf[bp+1] = fmt[i]; - bp += 2; + buf[bp] = '%' + buf[bp+1] = fmt[i] + bp += 2 } } else { - buf[bp] = fmt[i]; - bp++; + buf[bp] = fmt[i] + bp++ } } - return string(buf[0:bp]); + return string(buf[0:bp]) } // Asctime formats the parsed time value in the style of // ANSI C asctime: Sun Nov 6 08:49:37 1994 -func (t *Time) Asctime() string { return format(t, "%a %b %e %H:%M:%S %Y") } +func (t *Time) Asctime() string { return format(t, "%a %b %e %H:%M:%S %Y") } // RFC850 formats the parsed time value in the style of // RFC 850: Sunday, 06-Nov-94 08:49:37 UTC -func (t *Time) RFC850() string { return format(t, "%A, %d-%b-%y %H:%M:%S %Z") } +func (t *Time) RFC850() string { return format(t, "%A, %d-%b-%y %H:%M:%S %Z") } // RFC1123 formats the parsed time value in the style of // RFC 1123: Sun, 06 Nov 1994 08:49:37 UTC -func (t *Time) RFC1123() string { return format(t, "%a, %d %b %Y %H:%M:%S %Z") } +func (t *Time) RFC1123() string { return format(t, "%a, %d %b %Y %H:%M:%S %Z") } // String formats the parsed time value in the style of // date(1) - Sun Nov 6 08:49:37 UTC 1994 -func (t *Time) String() string { return format(t, "%a %b %e %H:%M:%S %Z %Y") } +func (t *Time) String() string { return format(t, "%a %b %e %H:%M:%S %Z %Y") } |
