time.Timeから取得した値があり、time.Now()ちょうど1か月前の別の時刻を取得したいと考えています。
私はtime.Sub()(別のが必要time.Time)で減算が可能であることを知っていますが、その結果はにtime.Durationなり、逆にそれが必要になります。
time.Timeから取得した値があり、time.Now()ちょうど1か月前の別の時刻を取得したいと考えています。
私はtime.Sub()(別のが必要time.Time)で減算が可能であることを知っていますが、その結果はにtime.Durationなり、逆にそれが必要になります。
回答:
AddDateを試してください:
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println("now:", now)
then := now.AddDate(0, -1, 0)
fmt.Println("then:", then)
}
生成する:
now: 2009-11-10 23:00:00 +0000 UTC
then: 2009-10-10 23:00:00 +0000 UTC
Sub時間を引く。ああ!
Thomas Browneのコメントに応えて、lnmxの答えは日付を減算するためにのみ機能するため、time.Time型から時間を減算するために機能する彼のコードの変更を次に示します。
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println("now:", now)
count := 10
then := now.Add(time.Duration(-count) * time.Minute)
// if we had fix number of units to subtract, we can use following line instead fo above 2 lines. It does type convertion automatically.
// then := now.Add(-10 * time.Minute)
fmt.Println("10 minutes ago:", then)
}
生成する:
now: 2009-11-10 23:00:00 +0000 UTC
10 minutes ago: 2009-11-10 22:50:00 +0000 UTC
言うまでもなく、必要に応じて、time.Hourまたはtime.Second代わりに使用することもできtime.Minuteます。
ParseDuration静的な値を使用しないでください!-10 * time.Minuteこれらの定数が定義されているのは、を使用するだけです。たとえば、time.Now().Add(-10 * time.Minute)必要なものはすべてです。
now.Add(-10 * time.Minute)さnow.Add(time.Duration(-10) * time.Minute)れることにも注意してください...
あなたは否定することができますtime.Duration:
then := now.Add(- dur)
あなたもtime.Durationに対して比較することができます0:
if dur > 0 {
dur = - dur
}
then := now.Add(dur)
あなたはhttp://play.golang.org/p/ml7svlL4eWで実用的な例を見ることができます
-1 * durが、機能しますがd := -1 ; dur = d * dur、エラーが発生します。「int型とtime.Duration型が一致しません」
マニュアルに従ってtime.ParseDuration負の期間を喜んで受け入れるものがあります。別の言い方をすれば、最初から正確な期間を取得できる期間を否定する必要はありません。
たとえば、1時間半減算する必要がある場合は、次のように実行できます。
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println("now:", now)
duration, _ := time.ParseDuration("-1.5h")
then := now.Add(duration)
fmt.Println("then:", then)
}