Поиск…


Вступление

Пакет time Go обеспечивает функциональность для измерения и отображения времени.

Этот пакет обеспечивает время структуры. time.Time , позволяющее хранить и выполнять вычисления по датам и времени.

Синтаксис

  • time.Date (2016, time.December, 31, 23, 59, 59, 999, time.UTC) // инициализировать
  • date1 == date2 // возвращает true когда 2 являются одним и тем же моментом
  • date1! = date2 // возвращает true когда 2 - другой момент
  • date1.Before (date2) // возвращает true когда первое строго перед вторым
  • date1.After (date2) // возвращает true когда первое строго после второго

Возвращаемое время. Время нулевого значения, когда функция имеет ошибку.

const timeFormat = "15 Monday January 2006"

func ParseDate(s string) (time.Time, error) {
    t, err := time.Parse(timeFormat, s)
    if err != nil {
        // time.Time{} returns January 1, year 1, 00:00:00.000000000 UTC
        // which according to the source code is the zero value for time.Time
        // https://golang.org/src/time/time.go#L23
        return time.Time{}, err
    }
    return t, nil
}

Анализ времени

Если у вас есть дата, сохраненная в виде строки, вам необходимо ее проанализировать. Использовать time.Parse .

//           time.Parse(   format   , date to parse)
date, err := time.Parse("01/02/2006",  "04/08/2017")
if err != nil {
    panic(err)
}

fmt.Println(date)
// Prints 2017-04-08 00:00:00 +0000 UTC

Первым параметром является макет, в котором строка хранит дату, а второй параметр - это строка, содержащая дату. 01/02/2006 - это то же самое, что говорить о формате MM/DD/YYYY .

Макет определяет формат, показывая, как время ссылки, определенное как Mon Jan 2 15:04:05 -0700 MST 2006 , будет интерпретировано, если бы оно было значением; он служит примером входного формата. Затем будет введена такая же интерпретация входной строки.

Вы можете увидеть константы, определенные в пакете времени, чтобы знать, как написать строку макета, но обратите внимание, что константы не экспортируются и не могут использоваться вне временного пакета.

const (
    stdLongMonth             // "January"
    stdMonth                 // "Jan"
    stdNumMonth              // "1"
    stdZeroMonth             // "01"
    stdLongWeekDay           // "Monday"
    stdWeekDay               // "Mon"
    stdDay                   // "2"
    stdUnderDay              // "_2"
    stdZeroDay               // "02"
    stdHour                  // "15"
    stdHour12                // "3"
    stdZeroHour12            // "03"
    stdMinute                // "4"
    stdZeroMinute            // "04"
    stdSecond                // "5"
    stdZeroSecond            // "05"
    stdLongYear              // "2006"
    stdYear                  // "06"
    stdPM                    // "PM"
    stdpm                    // "pm"
    stdTZ                    // "MST"
    stdISO8601TZ             // "Z0700"  // prints Z for UTC
    stdISO8601SecondsTZ      // "Z070000"
    stdISO8601ShortTZ        // "Z07"
    stdISO8601ColonTZ        // "Z07:00" // prints Z for UTC
    stdISO8601ColonSecondsTZ // "Z07:00:00"
    stdNumTZ                 // "-0700"  // always numeric
    stdNumSecondsTz          // "-070000"
    stdNumShortTZ            // "-07"    // always numeric
    stdNumColonTZ            // "-07:00" // always numeric
    stdNumColonSecondsTZ     // "-07:00:00"
)

Сравнение времени

Когда-нибудь вам нужно будет знать, с двумя объектами дат, если они соответствуют одной и той же дате, или найти, какая дата после другой.

В Go есть 4 способа сравнения дат:

  • date1 == date2 , возвращает true когда 2 являются одним и тем же моментом
  • date1 != date2 , возвращает true когда 2 - другой момент
  • date1.Before(date2) , возвращает true когда первое строго перед вторым
  • date1.After(date2) возвращает true когда первое строго после второго

ПРЕДУПРЕЖДЕНИЕ: Когда 2 раза для сравнения одинаковы (или соответствуют той же дате), функции After и Before вернут false , поскольку дата не указана ни до, ни после себя

  • date1 == date1 , возвращает true
  • date1 != date1 , возвращает false
  • date1.After(date1) , возвращает false
  • date1.Before(date1) , возвращает false

СОВЕТЫ. Если вам нужно знать, была ли дата раньше или равна другой, просто нужно объединить 4 оператора

  • date1 == date2 && date1.After(date2) , возвращает true когда date1 после или равна date2
    или используя ! (date1.Before(date2))
  • date1 == date2 && date1.Before(date2) , возвращает true когда date1 до или равна date2 или использует !(date1.After(date2))

Некоторые примеры того, как использовать:

// Init 2 dates for example
var date1 = time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC)
var date2 = time.Date(2017, time.July, 25, 16, 22, 42, 123, time.UTC)
var date3 = time.Date(2017, time.July, 25, 16, 22, 42, 123, time.UTC)

bool1 := date1.Before(date2) // true, because date1 is before date2
bool2 := date1.After(date2) // false, because date1 is not after date2

bool3 := date2.Before(date1) // false, because date2 is not before date1
bool4 := date2.After(date1) // true, because date2 is after date1

bool5 := date1 == date2 // false, not the same moment
bool6 := date1 == date3 // true, different objects but representing the exact same time

bool7 := date1 != date2 // true, different moments
bool8 := date1 != date3 // false, not different moments

bool9 := date1.After(date3) // false, because date1 is not after date3 (that are the same)
bool10:= date1.Before(date3) // false, because date1 is not before date3 (that are the same)

bool11 := !(date1.Before(date3)) // true, because date1 is not before date3
bool12 := !(date1.After(date3)) // true, because date1 is not after date3


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow