Bu bize, elimizde bulunan zamanı şimdiki zamanla karşılaştırarak, dolup dolmadığını nasıl kontrol edebileceğimizi gösteren basit bir örnektir. Zamanın RFC3339 veya ISO 8601 formatta olduğunu varsayıyoruz.


Kod


package main

import (
"fmt"
"time"
)

// expired accepts a `RFC3339`/`ISO 8601` formatted time and
// compares it to the current time to tell if it expired or not.
func expired(now time.Time, v string) (bool, error) {
fmt.Println("NOW:", now.Format(time.RFC3339))
fmt.Println("YOU:", v)

exp, err := time.ParseInLocation(time.RFC3339, v, now.Location())
if err != nil {
return false, err
}

if now.Sub(exp).Seconds() <= 0 {
return false, nil
}

return true, nil
}

func main() {
fmt.Println(expired(time.Now().UTC(), "2002-10-02T15:00:00Z"))
fmt.Println("------")
fmt.Println(expired(time.Now().UTC(), "2021-12-31T03:11:00Z"))
fmt.Println("------")
fmt.Println(expired(time.Now().UTC(), "2020-07-06T20:20:01+00:00"))
fmt.Println("------")
fmt.Println(expired(time.Now().UTC(), "2020-08-06T20:20:01+00:00"))
fmt.Println("------")
fmt.Println(expired(time.Now().UTC(), time.Now().Format(time.RFC3339)))
fmt.Println("------")
fmt.Println(expired(time.Now().UTC(), time.Now().UTC().Format(time.RFC3339)))
fmt.Println("------")
fmt.Println(expired(time.Now().UTC(), time.Now().Add(1*time.Minute).UTC().Format(time.RFC3339)))
fmt.Println("------")
fmt.Println(expired(time.Now(), time.Now().Add(1*time.Minute).UTC().Format(time.RFC3339)))
fmt.Println("------")
fmt.Println(time.Now().Zone())
fmt.Println(time.Now().Location())
fmt.Println(time.Now().UTC().Location())
}

Test


NOW: 2020-07-06T20:47:11Z
YOU: 2002-10-02T15:00:00Z
true
------
NOW: 2020-07-06T20:47:11Z
YOU: 2021-12-31T03:11:00Z
false
------
NOW: 2020-07-06T20:47:11Z
YOU: 2020-07-06T20:20:01+00:00
true
------
NOW: 2020-07-06T20:47:11Z
YOU: 2020-08-06T20:20:01+00:00
false
------
NOW: 2020-07-06T20:47:11Z
YOU: 2020-07-06T21:47:11+01:00
true
------
NOW: 2020-07-06T20:47:11Z
YOU: 2020-07-06T20:47:11Z
true
------
NOW: 2020-07-06T20:47:11Z
YOU: 2020-07-06T20:48:11Z
false
------
NOW: 2020-07-06T21:47:11+01:00
YOU: 2020-07-06T20:48:11Z
false
------
BST 3600
Local
UTC