Почему метод time.Add не работает с переменной time.Time с форматом time.RFC3339 для увеличения дня? - PullRequest
0 голосов
/ 04 августа 2020

Этот код устанавливает время в формате времени. RFC3339 изменяет час на 00:00, когда найдено 24, а затем должен увеличивать день, однако этого не происходит. Поделитесь пожалуйста мыслями :)

package main
    
import (
    "fmt"
    "strings"
    "time"
)

var dConv time.Time //contains converted time
var timeErr error

func main() {
    dateTime := "2020-01-01" + "T" + "24:00" + ":00Z"
    if strings.Contains(dateTime, "T24") {
        dateTime = strings.Replace(dateTime, "T24", "T00", 1)
        dConv, timeErr = time.Parse(time.RFC3339, dateTime)
        h := dConv
        if timeErr == nil {
            fmt.Println(h)
            h.AddDate(0, 0, 1)
            fmt.Println(h)
        }
    }
}

1 Ответ

2 голосов
/ 04 августа 2020

Метод time.Add() не изменяет время приемника, он не может, поскольку он не является приемником указателя. Вместо этого он возвращает результат time.Time, который вы ничему не назначаете, поэтому он отбрасывается.

Если вы вернете его в h, вы увидите, что результат увеличивается на день:

h = h.AddDate(0, 0, 1)

С этим изменением вывод будет (попробуйте на Go Playground ):

2020-01-01 00:00:00 +0000 UTC
2020-01-02 00:00:00 +0000 UTC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...