2015-10-07 17 views
10

Goの既存の日付に日数(実際には数週間)を追加しようとしています。私は myDate.Add(time.Hour * 24 * 7 * weeksToAdd)Goで日付を追加する

を試してみました。しかし、私が構築しようとすると、私はエラーを取得する:invalid operation: time.Hour * startAdd (mismatched types time.Duration and float64)

のでweeksToAddが現在float64ですが、私がintまたは何にそれを変更することができます。それをintに変更するだけで、私のエラーは変更されました。intDurationは乗算できません。

日に日を追加するにはどうすればよいですか?あなたはtime.DurationweeksToAddを変換する必要があり

答えて

11

:ゴーで

myDate.Add(time.Hour * 24 * 7 * time.Duration(weeksToAdd)) 

は、型の別名はtime.Durationが技術的int64であっても互換的に使用することはできません。

数値定数24と7は明示的に型指定されていませんが、そのまま使用することもできます。詳細はhttps://blog.golang.org/constantsを参照してください。

実行例についてはhttp://play.golang.org/p/86TFFlixWjを参照してください。 time.Durationは、基本的にナノ秒を表すので、24時間よりも優れた持続時間に作業するとき

コメントや他の回答で述べたよう

は、time.AddDate()の使用はtime.Add()することが好ましいです。日、週、月、年を使って作業する場合、夏時間、うるう年、うるう秒などの理由で注意が必要です。

time.Durationタイプのドキュメントと単位を表す関連する定数は、この問題(https://golang.org/pkg/time/#Duration)を強調する:サマータイムゾーン遷移間での混乱を避けるために、日単位以上のための定義はありません

+2

Time.Addは、インプレース動作しません。 –

+1

それは事実です、私は例を修正しましたが、それはここの要点以外にあります。 – SirDarius

+0

私は24と7を使うことができる理由を説明するための編集に感謝します。それは私のフォローアップの質問であることになっていました。 –

関連する問題