github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/time/time.go (about)

     1  // Copyright 2009 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // パッケージtimeは時間を測定し表示する機能を提供します。
     6  //
     7  // 暦の計算は常にグレゴリオ暦を前提としており、閏秒は考慮しません。
     8  //
     9  // # モノトニッククロック
    10  //
    11  // オペレーティングシステムは「壁掛け時計(wall clock)」と「モノトニッククロック(monotonic clock)」の2つを提供しています。壁掛け時計はクロック同期により変更される可能性がありますが、モノトニッククロックは変更されません。一般的なルールは、壁掛け時計は時刻を表示するために使用し、モノトニッククロックは時間を測定するために使用することです。このパッケージでは、time.Nowが返すTimeには壁掛け時計の読み取り結果とモノトニッククロックの読み取り結果の両方が含まれています。後の時刻表示操作は壁掛け時計の読み取り結果を使用し、後の時間測定操作(比較や差分の計算など)はモノトニッククロックの読み取り結果を使用します。
    12  //
    13  // たとえ壁掛け時計が操作中に変更された場合でも、以下のコードは常に約20ミリ秒の経過時間を計算します。
    14  //
    15  //	start := time.Now()
    16  //	... 20ミリ秒かかる処理 ...
    17  //	t := time.Now()
    18  //	elapsed := t.Sub(start)
    19  //
    20  // time.Since(start)、time.Until(deadline)、time.Now().Before(deadline)などの他のイディオムも、壁掛け時計のリセットに対して同様に頑健です。
    21  //
    22  // このセクションの残りの部分では、操作がモノトニッククロックを使用する方法の詳細を述べますが、これらの詳細を理解することはこのパッケージの使用には必要ありません。
    23  //
    24  // time.Nowが返すTimeにはモノトニッククロックの読み取り結果が含まれています。Time tがモノトニッククロックの読み取り結果を持つ場合、t.Addは壁掛け時計とモノトニッククロックの読み取り結果の両方に同じ期間を加算して結果を計算します。t.AddDate(y, m, d)、t.Round(d)、t.Truncate(d)は壁掛け時計の計算なので、結果からモノトニッククロックの読み取り結果は常に除去されます。t.In、t.Local、t.UTCは壁掛け時計の解釈への影響のために使用されますが、結果からモノトニッククロックの読み取り結果も常に除去されます。モノトニッククロックの読み取り結果を除去する正確な方法は、t = t.Round(0)を使用することです。
    25  //
    26  // tとuのいずれもモノトニッククロックの読み取り結果を含む場合、t.After(u)、t.Before(u)、t.Equal(u)、t.Compare(u)、t.Sub(u)は壁掛け時計の読み取り結果を無視してモノトニッククロックの読み取り結果だけを使用して実行されます。tまたはuのいずれかがモノトニッククロックの読み取り結果を含まない場合、これらの操作は壁掛け時計の読み取り結果を使用します。
    27  //
    28  // 一部のシステムでは、コンピューターがスリープモードに入るとモノトニッククロックが停止することがあります。そのようなシステムでは、t.Sub(u)はtとuの間で経過した実際の時間を正確に反映しない場合があります。
    29  //
    30  // モノトニッククロックの読み取り結果には、現在のプロセスの外部では意味がありません。t.GobEncode、t.MarshalBinary、t.MarshalJSON、t.MarshalTextによって生成されるシリアル化された形式では、モノトニッククロックの読み取り結果は省略され、t.Formatはそれに対するフォーマットを提供しません。同様に、コンストラクタtime.Date、time.Parse、time.ParseInLocation、およびtime.Unix、およびアンマーシャラーt.GobDecode、t.UnmarshalBinary、t.UnmarshalJSON、およびt.UnmarshalTextは常にモノトニッククロックの読み取り結果のない時刻を作成します。
    31  //
    32  // モノトニッククロックの読み取り結果はTimeの値にのみ存在します。Durationの値やt.Unixおよび関連する関数が返すUnix時刻には含まれていません。
    33  //
    34  // Goの==演算子は、時間の瞬間だけでなく、位置情報とモノトニッククロックの読み取り結果も比較します。Time型の等値テストについては、Time型のドキュメントを参照してください。
    35  //
    36  // デバッグ用に、t.Stringの結果には、存在する場合はモノトニッククロックの読み取りが含まれます。
    37  // t != uの場合、異なるモノトニッククロックの読み取りによって、t.String()とu.String()の出力に差異が見られます。
    38  //
    39  // # タイマーの解像度
    40  //
    41  // タイマーの解像度は、Goランタイム、オペレーティングシステム、
    42  // および基礎となるハードウェアによって異なります。
    43  // Unixでは、解像度は約1msです。
    44  // Windowsバージョン1803以降では、解像度は約0.5msです。
    45  // 古いWindowsバージョンでは、デフォルトの解像度は約16msですが、
    46  // [golang.org/x/sys/windows.TimeBeginPeriod] を使用して高解像度を要求することができます。
    47  package time
    48  
    49  // Timeは納秒単位の精度で時刻を表します。
    50  //
    51  // Timeを使用するプログラムでは通常、値として保存し、渡すべきです。
    52  // つまり、時刻変数や構造体のフィールドは*time.Timeではなくtime.Timeの型であるべきです。
    53  //
    54  // Timeの値は、GobDecode、UnmarshalBinary、UnmarshalJSON、UnmarshalTextメソッドを除いて、
    55  // 複数のゴルーチンで同時に使用できます。
    56  //
    57  // Timeの瞬間はBefore、After、Equalメソッドを使って比較することができます。
    58  // Subメソッドは2つの瞬間を引いてDurationを生成します。
    59  // AddメソッドはTimeとDurationを足してTimeを生成します。
    60  //
    61  // Time型のゼロ値は、UTCでの1年1月1日00:00:00.000000000です。
    62  // この時刻は実際にはほとんど使われないため、IsZeroメソッドは明示的に初期化されていない時刻を検出するための簡単な方法です。
    63  //
    64  // 各時刻には関連するLocationがあります。Local、UTC、およびInメソッドは、特定のLocationを持つTimeを返します。
    65  // これらのメソッドを使用してTime値のLocationを変更しても、それが表す実際の瞬間は変更されず、解釈するタイムゾーンのみが変更されます。
    66  //
    67  // GobEncode、MarshalBinary、MarshalJSON、MarshalTextメソッドによって保存されるTime値の表現には、Time.Locationのオフセットが格納されますが、
    68  // 場所の名前は格納されません。そのため、夏時間に関する情報が失われます。
    69  //
    70  // 必要な「壁時計」の読み取りに加えて、Timeにはオプションのプロセスの単調な時計の読み取りが含まれることがあります。
    71  // 比較や減算のための追加の精度を提供するためです。
    72  // 詳細については、パッケージのドキュメントの「単調な時計」のセクションを参照してください。
    73  //
    74  // Goの==演算子は、時刻の瞬間だけでなく、Locationと単調な時計の読み取りも比較します。
    75  // そのため、Timeの値は、まずすべての値に同じLocationが設定されていることを保証してから、
    76  // マップやデータベースのキーとして使用するべきではありません。これはUTCまたはLocalメソッドの使用によって実現でき、
    77  // 単調な時計の読み取りはt = t.Round(0)と設定することで削除する必要があります。
    78  // 一般的には、t.Equal(u)をt == uよりも優先し、t.Equalは最も正確な比較を使用し、
    79  // 1つの引数のみが単調な時計の読み取りを持つ場合のケースを正しく処理します。
    80  type Time struct {
    81  
    82  	// wallとextは、壁時の秒、壁時のナノ秒、およびオプションの単調クロックの読み取り値(ナノ秒単位)をエンコードします。
    83  	// 上位から下位のビット位置に従い、wallは1ビットのフラグ(hasMonotonic)、33ビットの秒フィールド、および30ビットの壁時のナノ秒フィールドをエンコードします。
    84  	// ナノ秒のフィールドの範囲は[0, 999999999]です。
    85  	// hasMonotonicビットが0の場合、33ビットのフィールドはゼロでなければならず、完全な符号付きの64ビットの壁秒は、Jan 1 year 1からの時間がextに格納されます。
    86  	// hasMonotonicビットが1の場合、33ビットのフィールドは1885年1月1日以降の33ビットの符号なし壁秒を保持し、extはプロセスの開始からの時間が符号付きの64ビットの単調クロックの読み取り値(ナノ秒単位)を保持します。
    87  	wall uint64
    88  	ext  int64
    89  
    90  	// locはTimeに対応する分、時、月、日、年を決定するために使用されるべき場所を指定します。
    91  	// nilの場所はUTCを意味します。
    92  	// すべてのUTC時刻はloc==nilで表され、loc==&utcLocではありません。
    93  	loc *Location
    94  }
    95  
    96  // tがuより後の時刻であるかどうかを報告します。
    97  func (t Time) After(u Time) bool
    98  
    99  // Beforeは、時刻tがuよりも前であるかどうかを報告します。
   100  func (t Time) Before(u Time) bool
   101  
   102  // Compare関数は時刻tとuを比較します。tがuより前の場合は-1を返し、tがuより後の場合は+1を返します。同じである場合は0を返します。
   103  func (t Time) Compare(u Time) int
   104  
   105  // Equalは、tとuが同じ瞬間を表しているかどうかを報告します。
   106  // 異なる場所にある場合でも、2つの時刻が等しい場合があります。
   107  // たとえば、6:00 +0200と4:00 UTCはEqualです。
   108  // Timeのドキュメントを参照して、==を使用する際の注意点を確認してください。
   109  // ほとんどのコードはEqualを使用する必要があります。
   110  func (t Time) Equal(u Time) bool
   111  
   112  // Monthは年の月を指定します(1月= 1、...)。
   113  type Month int
   114  
   115  const (
   116  	January Month = 1 + iota
   117  	February
   118  	March
   119  	April
   120  	May
   121  	June
   122  	July
   123  	August
   124  	September
   125  	October
   126  	November
   127  	December
   128  )
   129  
   130  // Stringは月の英語名(「January」、「February」、...)を返します。
   131  func (m Month) String() string
   132  
   133  // Weekdayは、週の日を指定します(日曜日 = 0、...)。
   134  type Weekday int
   135  
   136  const (
   137  	Sunday Weekday = iota
   138  	Monday
   139  	Tuesday
   140  	Wednesday
   141  	Thursday
   142  	Friday
   143  	Saturday
   144  )
   145  
   146  // Stringは日の英語名("Sunday", "Monday", ...)を返します。
   147  func (d Weekday) String() string
   148  
   149  // IsZero は t がゼロのタイムインスタント(西暦1年1月1日00:00:00 UTC)を表すかどうかを報告します。
   150  func (t Time) IsZero() bool
   151  
   152  // Dateはtが発生する年、月、日を返します。
   153  func (t Time) Date() (year int, month Month, day int)
   154  
   155  // Yearはtが発生する年を返します。
   156  func (t Time) Year() int
   157  
   158  // Month は t で指定された年の月を返します。
   159  func (t Time) Month() Month
   160  
   161  // Dayはtによって指定された月の日を返します。
   162  func (t Time) Day() int
   163  
   164  // Weekdayはtに指定された曜日を返します。
   165  func (t Time) Weekday() Weekday
   166  
   167  // ISOWeekは、tが発生するISO 8601の年と週番号を返します。
   168  // 週は1から53までの範囲です。年nの1月1日から1月3日は年n-1の週52または53に属する場合があり、12月29日から12月31日は年n+1の週1に属する場合があります。
   169  func (t Time) ISOWeek() (year, week int)
   170  
   171  // Clock 関数は、t で指定された日の時間、分、秒を返します。
   172  func (t Time) Clock() (hour, min, sec int)
   173  
   174  // Hourはtで指定された日の中の時間を返します。範囲は[0, 23]です。
   175  func (t Time) Hour() int
   176  
   177  // Minuteは時間tで指定された時間内の分のオフセットを、[0、59]の範囲で返します。
   178  func (t Time) Minute() int
   179  
   180  // Secondは、tで指定された分の中の2番目のオフセットを、[0, 59]の範囲で返します。
   181  func (t Time) Second() int
   182  
   183  // Nanosecondはtで指定された秒の中でのナノ秒オフセットを[0, 999999999]の範囲で返します。
   184  func (t Time) Nanosecond() int
   185  
   186  // YearDay は与えられた t によって指定される年の日を返します。
   187  // 非閏年の場合、範囲は [1, 365] であり、閏年の場合は [1, 366] です。
   188  func (t Time) YearDay() int
   189  
   190  // Durationは2つの瞬間の経過時間をint64ナノ秒カウントとして表します。
   191  // この表現は、最大表現可能な期間を約290年に制限しています。
   192  type Duration int64
   193  
   194  // 共通の期間です。Dayやそれ以上の単位の定義はありません。
   195  // 夏時間ゾーンの移行時に混乱を避けるためです。
   196  //
   197  // Durationの単位数を数えるには、次のように割ります:
   198  //
   199  //	second := time.Second
   200  //	fmt.Print(int64(second/time.Millisecond)) // 1000と出力されます
   201  //
   202  // 整数の単位数をDurationに変換するには、次のように掛けます:
   203  //
   204  //	seconds := 10
   205  //	fmt.Print(time.Duration(seconds)*time.Second) // 10sと出力されます
   206  const (
   207  	Nanosecond  Duration = 1
   208  	Microsecond          = 1000 * Nanosecond
   209  	Millisecond          = 1000 * Microsecond
   210  	Second               = 1000 * Millisecond
   211  	Minute               = 60 * Second
   212  	Hour                 = 60 * Minute
   213  )
   214  
   215  // Stringは、期間を「72h3m0.5s」という形式の文字列で返します。
   216  // 先頭のゼロ単位は省略されます。特別なケースとして、1秒未満の期間は、先頭の数字が0以外になるように、より小さな単位(ミリ秒、マイクロ秒、ナノ秒)を使用してフォーマットされます。ゼロ期間は「0s」としてフォーマットされます。
   217  func (d Duration) String() string
   218  
   219  // Nanosecondsは、期間を整数のナノ秒数として返します。
   220  func (d Duration) Nanoseconds() int64
   221  
   222  // Microsecondsは、整数のマイクロ秒数として期間を返します。
   223  func (d Duration) Microseconds() int64
   224  
   225  // Millisecondsは、期間を整数のミリ秒カウントとして返します。
   226  func (d Duration) Milliseconds() int64
   227  
   228  // Secondsは、秒単位の浮動小数点数としての期間を返します。
   229  func (d Duration) Seconds() float64
   230  
   231  // Minutesは、分単位の浮動小数点数としての期間を返します。
   232  func (d Duration) Minutes() float64
   233  
   234  // Hoursは時間を浮動小数点数として返します。
   235  func (d Duration) Hours() float64
   236  
   237  // Truncate は d を 0 に向かって丸めた結果を、m の倍数にして返します。
   238  // もし m <= 0 であれば、Truncate は d をそのまま返します。
   239  func (d Duration) Truncate(m Duration) Duration
   240  
   241  // Round関数は、dを最も近いmの倍数に丸めた結果を返します。
   242  // 半分の値の丸め方は、ゼロから離れるように丸めます。
   243  // 結果がDurationに格納できる最大(または最小)値を超える場合、
   244  // Round関数は最大(または最小)のdurationを返します。
   245  // m <= 0の場合、Round関数はdをそのまま返します。
   246  func (d Duration) Round(m Duration) Duration
   247  
   248  // Absはdの絶対値を返します。
   249  // 特別なケースとして、math.MinInt64はmath.MaxInt64に変換されます。
   250  func (d Duration) Abs() Duration
   251  
   252  // Addは時間tにdを加えた時間を返します。
   253  func (t Time) Add(d Duration) Time
   254  
   255  // Subは期間t-uを返します。結果がDurationに格納できる最大値(または最小値)を超える場合、最大(または最小)の期間が返されます。
   256  // 期間dのt-dを計算するためには、t.Add(-d)を使用してください。
   257  func (t Time) Sub(u Time) Duration
   258  
   259  // Since(t)は、tから経過した時間を返します。
   260  // これはtime.Now().Sub(t)の省略形です。
   261  func Since(t Time) Duration
   262  
   263  // Untilはtまでの時間を返します。
   264  // これはt.Sub(time.Now())の省略形です。
   265  func Until(t Time) Duration
   266  
   267  // AddDateはtに指定された年数、月数、日数を加算した時間を返します。
   268  // 例えば、2011年1月1日にAddDate(-1, 2, 3)を適用すると、
   269  // 2010年3月4日が返されます。
   270  //
   271  // 日付は基本的にタイムゾーンに結び付けられており、日などの暦期間には固定された期間がありません。
   272  // AddDateは、Time値のLocationを使用してこれらの期間を決定します。
   273  // つまり、同じAddDate引数でも、基本となるTime値とそのLocationに応じて、絶対時間のシフトが異なる場合があります。
   274  // たとえば、3月27日の12:00に適用されるAddDate(0、0、1)は常に3月28日の12:00を返します。
   275  // 一部の場所や年では、これは24時間のシフトです。他の場所や年では、夏時間の移行により23時間のシフトです。
   276  //
   277  // AddDateはDateと同じように結果を正規化します。
   278  // つまり、10月31日に1ヶ月を追加すると11月31日となり、
   279  // これは正規化されたフォームである12月1日になります。
   280  func (t Time) AddDate(years int, months int, days int) Time
   281  
   282  // 現在のローカル時間を返します。
   283  func Now() Time
   284  
   285  // UTCは場所をUTCに設定したtを返します。
   286  func (t Time) UTC() Time
   287  
   288  // Local は t の位置をローカルの時間に設定して返します。
   289  func (t Time) Local() Time
   290  
   291  // In は、同じ時刻インスタンスを表す t のコピーを返しますが、表示目的でコピーの場所情報を loc に設定します。
   292  //
   293  // loc が nil の場合、In はパニックを発生させます。
   294  func (t Time) In(loc *Location) Time
   295  
   296  // Locationは、tに関連付けられたタイムゾーン情報を返します。
   297  func (t Time) Location() *Location
   298  
   299  // Zone関数は、時刻tに有効なタイムゾーンを計算し、タイムゾーンの省略名(「CET」など)とUTCから東へのオフセットを秒単位で返します。
   300  func (t Time) Zone() (name string, offset int)
   301  
   302  // ZoneBoundsは、時刻tに有効なタイムゾーンの範囲を返します。
   303  // ゾーンはstartで始まり、次のゾーンはendで始まります。
   304  // ゾーンが時間の開始時点で始まる場合、startはゼロの時間として返されます。
   305  // ゾーンが永遠に続く場合、endはゼロの時間として返されます。
   306  // 返された時間の場所はtと同じになります。
   307  func (t Time) ZoneBounds() (start, end Time)
   308  
   309  // UnixはtをUnix時刻として返します。これは1970年1月1日UTCからの経過秒数です。結果はtに関連付けられた場所に依存しません。
   310  // Unix系のオペレーティングシステムはしばしば時間を32ビットの秒数として記録しますが、ここで返される値は64ビットのため、過去や未来の数十億年に対しても有効です。
   311  func (t Time) Unix() int64
   312  
   313  // UnixMilliはtをUnix時刻として返します。つまり、1970年1月1日UTCから経過したミリ秒の数です。int64で表現できない(1970年より292万年以上前または後の日付)場合、結果は未定義です。結果はtに関連付けられた場所に依存しません。
   314  func (t Time) UnixMilli() int64
   315  
   316  // UnixMicroは、tをUnix時間として返します。これは、1970年1月1日UTCから経過したマイクロ秒の数です。int64で表現できない場合(年-290307以前または年294246以降の日付)、結果は未定義です。結果は、tに関連付けられた場所に依存しません。
   317  func (t Time) UnixMicro() int64
   318  
   319  // UnixNanoはtをUnix時刻として返します。これは、1970年1月1日UTCから経過したナノ秒数です。Unix時刻がint64で表現できない場合(1678年以前または2262年以降の日付)、結果は未定義です。なお、これはゼロのTimeに対してUnixNanoを呼び出した結果も未定義であることを意味します。結果はtに関連付けられた場所に依存しません。
   320  func (t Time) UnixNano() int64
   321  
   322  // MarshalBinaryはencoding.BinaryMarshalerインターフェースを実装します。
   323  func (t Time) MarshalBinary() ([]byte, error)
   324  
   325  // UnmarshalBinaryはencoding.BinaryUnmarshalerインターフェースを実装します。
   326  func (t *Time) UnmarshalBinary(data []byte) error
   327  
   328  // GobEncodeはgob.GobEncoderインターフェースを実装します。
   329  func (t Time) GobEncode() ([]byte, error)
   330  
   331  // GobDecodeはgob.GobDecoderインターフェースを実装します。
   332  func (t *Time) GobDecode(data []byte) error
   333  
   334  // MarshalJSONはjson.Marshalerインターフェースを実装します。
   335  // 時刻はRFC 3339形式で引用符で囲まれた文字列です。秒未満の精度もあります。
   336  // タイムスタンプが有効なRFC 3339として表現できない場合
   337  // (例:年が範囲外の場合)、エラーが報告されます。
   338  func (t Time) MarshalJSON() ([]byte, error)
   339  
   340  // UnmarshalJSONはjson.Unmarshalerインターフェースを実装します。
   341  // 時刻はRFC 3339形式でクォートされた文字列である必要があります。
   342  func (t *Time) UnmarshalJSON(data []byte) error
   343  
   344  // MarshalTextはencoding.TextMarshalerインターフェースを実装します。
   345  // 時間はRFC 3339形式でサブ秒の精度でフォーマットされます。
   346  // タイムスタンプが有効なRFC 3339として表現できない場合(例:年が範囲外の場合)、エラーが報告されます。
   347  func (t Time) MarshalText() ([]byte, error)
   348  
   349  // UnmarshalTextはencoding.TextUnmarshalerインターフェースを実装します。
   350  // 時刻はRFC 3339形式である必要があります。
   351  func (t *Time) UnmarshalText(data []byte) error
   352  
   353  // Unixは、与えられたUnix時刻に対応する現地時刻を返します。
   354  // secは1970年1月1日UTCからの秒数であり、nsecはナノ秒単位です。
   355  // nsecは[0、999999999]の範囲外を指定することもできます。
   356  // すべてのsec値に対応する時間値が存在するわけではありません。そのような値の一つは1 << 63-1(最大のint64値)です。
   357  func Unix(sec int64, nsec int64) Time
   358  
   359  // UnixMilliは与えられたUnix時刻に対応するローカルの時刻を返します。
   360  // 1970年1月1日UTCからのミリ秒で表されます。
   361  func UnixMilli(msec int64) Time
   362  
   363  // UnixMicroは、与えられたUnix時間に対応するローカル時間を返します。
   364  // usecは1970年1月1日UTCからのマイクロ秒です。
   365  func UnixMicro(usec int64) Time
   366  
   367  // IsDSTは、設定された場所の時刻が夏時間(Daylight Savings Time)かどうかを報告します。
   368  func (t Time) IsDST() bool
   369  
   370  // Date関数は、与えられた場所と時間に対応するTimeZoneでの、 yyyy-mm-dd hh:mm:ss + nsecナノ秒のTimeを返します。
   371  //
   372  // 月、日、時、分、秒、nsecの値は通常の範囲外である場合でも、変換中に正規化されます。
   373  // 例えば、10月32日は11月1日に変換されます。
   374  //
   375  // 夏時間の変遷では、一部の時間が飛ばされたり、繰り返されることがあります。
   376  // 例えば、アメリカ合衆国では、2011年3月13日の2時15分は存在せず、
   377  // 2011年11月6日の1時15分は2回存在します。そのような場合、
   378  // タイムゾーンの選択、つまり時間が明確でなくなります。
   379  // Date関数は、変遷に関与する2つのタイムゾーンのうちの1つで正確な時間を返しますが、
   380  // どちらかは保証されません。
   381  //
   382  // locがnilの場合、Date関数はパニックを発生させます。
   383  func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time
   384  
   385  // Truncate関数は、tをd(ゼロ時点からの倍数)に切り捨てた結果を返します。
   386  // もしd <= 0の場合、Truncateはmonotonicなクロックの読み取りを除いたtを返しますが、それ以外は変更されません。
   387  //
   388  // Truncateは、時間をゼロ時点からの絶対経過時間として操作します。
   389  // 時間の表現形式ではなく、時刻を操作します。したがって、Truncate(Hour)は、
   390  // 時刻のLocationに依存して、非ゼロの分を持つ時刻を返す場合があります。
   391  func (t Time) Truncate(d Duration) Time
   392  
   393  // Roundはtを最も近いdの倍数に丸めた結果を返します(ゼロ時からの経過時間を使います)。
   394  // 半分の値の丸め方は切り上げです。
   395  // d <= 0の場合、Roundはtをモノトニックな時計読み取りを除いて変更せずに返します。
   396  //
   397  // Roundは時間の表示形式ではなく、ゼロ時からの絶対経過時間として動作します。
   398  // したがって、Round(Hour)は時間のLocationによって非ゼロの分を持つことがあります。
   399  func (t Time) Round(d Duration) Time