1// Copyright 2011 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 5package time_test 6 7import ( 8 "fmt" 9 "time" 10) 11 12func expensiveCall() {} 13 14func ExampleDuration() { 15 t0 := time.Now() 16 expensiveCall() 17 t1 := time.Now() 18 fmt.Printf("The call took %v to run.\n", t1.Sub(t0)) 19} 20 21func ExampleDuration_Round() { 22 d, err := time.ParseDuration("1h15m30.918273645s") 23 if err != nil { 24 panic(err) 25 } 26 27 round := []time.Duration{ 28 time.Nanosecond, 29 time.Microsecond, 30 time.Millisecond, 31 time.Second, 32 2 * time.Second, 33 time.Minute, 34 10 * time.Minute, 35 time.Hour, 36 } 37 38 for _, r := range round { 39 fmt.Printf("d.Round(%6s) = %s\n", r, d.Round(r).String()) 40 } 41 // Output: 42 // d.Round( 1ns) = 1h15m30.918273645s 43 // d.Round( 1µs) = 1h15m30.918274s 44 // d.Round( 1ms) = 1h15m30.918s 45 // d.Round( 1s) = 1h15m31s 46 // d.Round( 2s) = 1h15m30s 47 // d.Round( 1m0s) = 1h16m0s 48 // d.Round( 10m0s) = 1h20m0s 49 // d.Round(1h0m0s) = 1h0m0s 50} 51 52func ExampleDuration_String() { 53 fmt.Println(1*time.Hour + 2*time.Minute + 300*time.Millisecond) 54 fmt.Println(300 * time.Millisecond) 55 // Output: 56 // 1h2m0.3s 57 // 300ms 58} 59 60func ExampleDuration_Truncate() { 61 d, err := time.ParseDuration("1h15m30.918273645s") 62 if err != nil { 63 panic(err) 64 } 65 66 trunc := []time.Duration{ 67 time.Nanosecond, 68 time.Microsecond, 69 time.Millisecond, 70 time.Second, 71 2 * time.Second, 72 time.Minute, 73 10 * time.Minute, 74 time.Hour, 75 } 76 77 for _, t := range trunc { 78 fmt.Printf("d.Truncate(%6s) = %s\n", t, d.Truncate(t).String()) 79 } 80 // Output: 81 // d.Truncate( 1ns) = 1h15m30.918273645s 82 // d.Truncate( 1µs) = 1h15m30.918273s 83 // d.Truncate( 1ms) = 1h15m30.918s 84 // d.Truncate( 1s) = 1h15m30s 85 // d.Truncate( 2s) = 1h15m30s 86 // d.Truncate( 1m0s) = 1h15m0s 87 // d.Truncate( 10m0s) = 1h10m0s 88 // d.Truncate(1h0m0s) = 1h0m0s 89} 90 91func ExampleParseDuration() { 92 hours, _ := time.ParseDuration("10h") 93 complex, _ := time.ParseDuration("1h10m10s") 94 micro, _ := time.ParseDuration("1µs") 95 // The package also accepts the incorrect but common prefix u for micro. 96 micro2, _ := time.ParseDuration("1us") 97 98 fmt.Println(hours) 99 fmt.Println(complex) 100 fmt.Printf("There are %.0f seconds in %v.\n", complex.Seconds(), complex) 101 fmt.Printf("There are %d nanoseconds in %v.\n", micro.Nanoseconds(), micro) 102 fmt.Printf("There are %6.2e seconds in %v.\n", micro2.Seconds(), micro2) 103 // Output: 104 // 10h0m0s 105 // 1h10m10s 106 // There are 4210 seconds in 1h10m10s. 107 // There are 1000 nanoseconds in 1µs. 108 // There are 1.00e-06 seconds in 1µs. 109} 110 111func ExampleDuration_Hours() { 112 h, _ := time.ParseDuration("4h30m") 113 fmt.Printf("I've got %.1f hours of work left.", h.Hours()) 114 // Output: I've got 4.5 hours of work left. 115} 116 117func ExampleDuration_Microseconds() { 118 u, _ := time.ParseDuration("1s") 119 fmt.Printf("One second is %d microseconds.\n", u.Microseconds()) 120 // Output: 121 // One second is 1000000 microseconds. 122} 123 124func ExampleDuration_Milliseconds() { 125 u, _ := time.ParseDuration("1s") 126 fmt.Printf("One second is %d milliseconds.\n", u.Milliseconds()) 127 // Output: 128 // One second is 1000 milliseconds. 129} 130 131func ExampleDuration_Minutes() { 132 m, _ := time.ParseDuration("1h30m") 133 fmt.Printf("The movie is %.0f minutes long.", m.Minutes()) 134 // Output: The movie is 90 minutes long. 135} 136 137func ExampleDuration_Nanoseconds() { 138 u, _ := time.ParseDuration("1µs") 139 fmt.Printf("One microsecond is %d nanoseconds.\n", u.Nanoseconds()) 140 // Output: 141 // One microsecond is 1000 nanoseconds. 142} 143 144func ExampleDuration_Seconds() { 145 m, _ := time.ParseDuration("1m30s") 146 fmt.Printf("Take off in t-%.0f seconds.", m.Seconds()) 147 // Output: Take off in t-90 seconds. 148} 149 150var c chan int 151 152func handle(int) {} 153 154func ExampleAfter() { 155 select { 156 case m := <-c: 157 handle(m) 158 case <-time.After(10 * time.Second): 159 fmt.Println("timed out") 160 } 161} 162 163func ExampleSleep() { 164 time.Sleep(100 * time.Millisecond) 165} 166 167func statusUpdate() string { return "" } 168 169func ExampleTick() { 170 c := time.Tick(5 * time.Second) 171 for next := range c { 172 fmt.Printf("%v %s\n", next, statusUpdate()) 173 } 174} 175 176func ExampleMonth() { 177 _, month, day := time.Now().Date() 178 if month == time.November && day == 10 { 179 fmt.Println("Happy Go day!") 180 } 181} 182 183func ExampleDate() { 184 t := time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC) 185 fmt.Printf("Go launched at %s\n", t.Local()) 186 // Output: Go launched at 2009-11-10 15:00:00 -0800 PST 187} 188 189func ExampleNewTicker() { 190 ticker := time.NewTicker(time.Second) 191 defer ticker.Stop() 192 done := make(chan bool) 193 go func() { 194 time.Sleep(10 * time.Second) 195 done <- true 196 }() 197 for { 198 select { 199 case <-done: 200 fmt.Println("Done!") 201 return 202 case t := <-ticker.C: 203 fmt.Println("Current time: ", t) 204 } 205 } 206} 207 208func ExampleTime_Format() { 209 // Parse a time value from a string in the standard Unix format. 210 t, err := time.Parse(time.UnixDate, "Wed Feb 25 11:06:39 PST 2015") 211 if err != nil { // Always check errors even if they should not happen. 212 panic(err) 213 } 214 215 tz, err := time.LoadLocation("Asia/Shanghai") 216 if err != nil { // Always check errors even if they should not happen. 217 panic(err) 218 } 219 220 // time.Time's Stringer method is useful without any format. 221 fmt.Println("default format:", t) 222 223 // Predefined constants in the package implement common layouts. 224 fmt.Println("Unix format:", t.Format(time.UnixDate)) 225 226 // The time zone attached to the time value affects its output. 227 fmt.Println("Same, in UTC:", t.UTC().Format(time.UnixDate)) 228 229 fmt.Println("in Shanghai with seconds:", t.In(tz).Format("2006-01-02T15:04:05 -070000")) 230 231 fmt.Println("in Shanghai with colon seconds:", t.In(tz).Format("2006-01-02T15:04:05 -07:00:00")) 232 233 // The rest of this function demonstrates the properties of the 234 // layout string used in the format. 235 236 // The layout string used by the Parse function and Format method 237 // shows by example how the reference time should be represented. 238 // We stress that one must show how the reference time is formatted, 239 // not a time of the user's choosing. Thus each layout string is a 240 // representation of the time stamp, 241 // Jan 2 15:04:05 2006 MST 242 // An easy way to remember this value is that it holds, when presented 243 // in this order, the values (lined up with the elements above): 244 // 1 2 3 4 5 6 -7 245 // There are some wrinkles illustrated below. 246 247 // Most uses of Format and Parse use constant layout strings such as 248 // the ones defined in this package, but the interface is flexible, 249 // as these examples show. 250 251 // Define a helper function to make the examples' output look nice. 252 do := func(name, layout, want string) { 253 got := t.Format(layout) 254 if want != got { 255 fmt.Printf("error: for %q got %q; expected %q\n", layout, got, want) 256 return 257 } 258 fmt.Printf("%-16s %q gives %q\n", name, layout, got) 259 } 260 261 // Print a header in our output. 262 fmt.Printf("\nFormats:\n\n") 263 264 // Simple starter examples. 265 do("Basic full date", "Mon Jan 2 15:04:05 MST 2006", "Wed Feb 25 11:06:39 PST 2015") 266 do("Basic short date", "2006/01/02", "2015/02/25") 267 268 // The hour of the reference time is 15, or 3PM. The layout can express 269 // it either way, and since our value is the morning we should see it as 270 // an AM time. We show both in one format string. Lower case too. 271 do("AM/PM", "3PM==3pm==15h", "11AM==11am==11h") 272 273 // When parsing, if the seconds value is followed by a decimal point 274 // and some digits, that is taken as a fraction of a second even if 275 // the layout string does not represent the fractional second. 276 // Here we add a fractional second to our time value used above. 277 t, err = time.Parse(time.UnixDate, "Wed Feb 25 11:06:39.1234 PST 2015") 278 if err != nil { 279 panic(err) 280 } 281 // It does not appear in the output if the layout string does not contain 282 // a representation of the fractional second. 283 do("No fraction", time.UnixDate, "Wed Feb 25 11:06:39 PST 2015") 284 285 // Fractional seconds can be printed by adding a run of 0s or 9s after 286 // a decimal point in the seconds value in the layout string. 287 // If the layout digits are 0s, the fractional second is of the specified 288 // width. Note that the output has a trailing zero. 289 do("0s for fraction", "15:04:05.00000", "11:06:39.12340") 290 291 // If the fraction in the layout is 9s, trailing zeros are dropped. 292 do("9s for fraction", "15:04:05.99999999", "11:06:39.1234") 293 294 // Output: 295 // default format: 2015-02-25 11:06:39 -0800 PST 296 // Unix format: Wed Feb 25 11:06:39 PST 2015 297 // Same, in UTC: Wed Feb 25 19:06:39 UTC 2015 298 //in Shanghai with seconds: 2015-02-26T03:06:39 +080000 299 //in Shanghai with colon seconds: 2015-02-26T03:06:39 +08:00:00 300 // 301 // Formats: 302 // 303 // Basic full date "Mon Jan 2 15:04:05 MST 2006" gives "Wed Feb 25 11:06:39 PST 2015" 304 // Basic short date "2006/01/02" gives "2015/02/25" 305 // AM/PM "3PM==3pm==15h" gives "11AM==11am==11h" 306 // No fraction "Mon Jan _2 15:04:05 MST 2006" gives "Wed Feb 25 11:06:39 PST 2015" 307 // 0s for fraction "15:04:05.00000" gives "11:06:39.12340" 308 // 9s for fraction "15:04:05.99999999" gives "11:06:39.1234" 309 310} 311 312func ExampleTime_Format_pad() { 313 // Parse a time value from a string in the standard Unix format. 314 t, err := time.Parse(time.UnixDate, "Sat Mar 7 11:06:39 PST 2015") 315 if err != nil { // Always check errors even if they should not happen. 316 panic(err) 317 } 318 319 // Define a helper function to make the examples' output look nice. 320 do := func(name, layout, want string) { 321 got := t.Format(layout) 322 if want != got { 323 fmt.Printf("error: for %q got %q; expected %q\n", layout, got, want) 324 return 325 } 326 fmt.Printf("%-16s %q gives %q\n", name, layout, got) 327 } 328 329 // The predefined constant Unix uses an underscore to pad the day. 330 do("Unix", time.UnixDate, "Sat Mar 7 11:06:39 PST 2015") 331 332 // For fixed-width printing of values, such as the date, that may be one or 333 // two characters (7 vs. 07), use an _ instead of a space in the layout string. 334 // Here we print just the day, which is 2 in our layout string and 7 in our 335 // value. 336 do("No pad", "<2>", "<7>") 337 338 // An underscore represents a space pad, if the date only has one digit. 339 do("Spaces", "<_2>", "< 7>") 340 341 // A "0" indicates zero padding for single-digit values. 342 do("Zeros", "<02>", "<07>") 343 344 // If the value is already the right width, padding is not used. 345 // For instance, the second (05 in the reference time) in our value is 39, 346 // so it doesn't need padding, but the minutes (04, 06) does. 347 do("Suppressed pad", "04:05", "06:39") 348 349 // Output: 350 // Unix "Mon Jan _2 15:04:05 MST 2006" gives "Sat Mar 7 11:06:39 PST 2015" 351 // No pad "<2>" gives "<7>" 352 // Spaces "<_2>" gives "< 7>" 353 // Zeros "<02>" gives "<07>" 354 // Suppressed pad "04:05" gives "06:39" 355 356} 357 358func ExampleTime_GoString() { 359 t := time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC) 360 fmt.Println(t.GoString()) 361 t = t.Add(1 * time.Minute) 362 fmt.Println(t.GoString()) 363 t = t.AddDate(0, 1, 0) 364 fmt.Println(t.GoString()) 365 t, _ = time.Parse("Jan 2, 2006 at 3:04pm (MST)", "Feb 3, 2013 at 7:54pm (UTC)") 366 fmt.Println(t.GoString()) 367 368 // Output: 369 // time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC) 370 // time.Date(2009, time.November, 10, 23, 1, 0, 0, time.UTC) 371 // time.Date(2009, time.December, 10, 23, 1, 0, 0, time.UTC) 372 // time.Date(2013, time.February, 3, 19, 54, 0, 0, time.UTC) 373} 374 375func ExampleParse() { 376 // See the example for Time.Format for a thorough description of how 377 // to define the layout string to parse a time.Time value; Parse and 378 // Format use the same model to describe their input and output. 379 380 // longForm shows by example how the reference time would be represented in 381 // the desired layout. 382 const longForm = "Jan 2, 2006 at 3:04pm (MST)" 383 t, _ := time.Parse(longForm, "Feb 3, 2013 at 7:54pm (PST)") 384 fmt.Println(t) 385 386 // shortForm is another way the reference time would be represented 387 // in the desired layout; it has no time zone present. 388 // Note: without explicit zone, returns time in UTC. 389 const shortForm = "2006-Jan-02" 390 t, _ = time.Parse(shortForm, "2013-Feb-03") 391 fmt.Println(t) 392 393 // Some valid layouts are invalid time values, due to format specifiers 394 // such as _ for space padding and Z for zone information. 395 // For example the RFC3339 layout 2006-01-02T15:04:05Z07:00 396 // contains both Z and a time zone offset in order to handle both valid options: 397 // 2006-01-02T15:04:05Z 398 // 2006-01-02T15:04:05+07:00 399 t, _ = time.Parse(time.RFC3339, "2006-01-02T15:04:05Z") 400 fmt.Println(t) 401 t, _ = time.Parse(time.RFC3339, "2006-01-02T15:04:05+07:00") 402 fmt.Println(t) 403 _, err := time.Parse(time.RFC3339, time.RFC3339) 404 fmt.Println("error", err) // Returns an error as the layout is not a valid time value 405 406 // Output: 407 // 2013-02-03 19:54:00 -0800 PST 408 // 2013-02-03 00:00:00 +0000 UTC 409 // 2006-01-02 15:04:05 +0000 UTC 410 // 2006-01-02 15:04:05 +0700 +0700 411 // error parsing time "2006-01-02T15:04:05Z07:00": extra text: "07:00" 412} 413 414func ExampleParseInLocation() { 415 loc, _ := time.LoadLocation("Europe/Berlin") 416 417 // This will look for the name CEST in the Europe/Berlin time zone. 418 const longForm = "Jan 2, 2006 at 3:04pm (MST)" 419 t, _ := time.ParseInLocation(longForm, "Jul 9, 2012 at 5:02am (CEST)", loc) 420 fmt.Println(t) 421 422 // Note: without explicit zone, returns time in given location. 423 const shortForm = "2006-Jan-02" 424 t, _ = time.ParseInLocation(shortForm, "2012-Jul-09", loc) 425 fmt.Println(t) 426 427 // Output: 428 // 2012-07-09 05:02:00 +0200 CEST 429 // 2012-07-09 00:00:00 +0200 CEST 430} 431 432func ExampleUnix() { 433 unixTime := time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC) 434 fmt.Println(unixTime.Unix()) 435 t := time.Unix(unixTime.Unix(), 0).UTC() 436 fmt.Println(t) 437 438 // Output: 439 // 1257894000 440 // 2009-11-10 23:00:00 +0000 UTC 441} 442 443func ExampleUnixMicro() { 444 umt := time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC) 445 fmt.Println(umt.UnixMicro()) 446 t := time.UnixMicro(umt.UnixMicro()).UTC() 447 fmt.Println(t) 448 449 // Output: 450 // 1257894000000000 451 // 2009-11-10 23:00:00 +0000 UTC 452} 453 454func ExampleUnixMilli() { 455 umt := time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC) 456 fmt.Println(umt.UnixMilli()) 457 t := time.UnixMilli(umt.UnixMilli()).UTC() 458 fmt.Println(t) 459 460 // Output: 461 // 1257894000000 462 // 2009-11-10 23:00:00 +0000 UTC 463} 464 465func ExampleTime_Unix() { 466 // 1 billion seconds of Unix, three ways. 467 fmt.Println(time.Unix(1e9, 0).UTC()) // 1e9 seconds 468 fmt.Println(time.Unix(0, 1e18).UTC()) // 1e18 nanoseconds 469 fmt.Println(time.Unix(2e9, -1e18).UTC()) // 2e9 seconds - 1e18 nanoseconds 470 471 t := time.Date(2001, time.September, 9, 1, 46, 40, 0, time.UTC) 472 fmt.Println(t.Unix()) // seconds since 1970 473 fmt.Println(t.UnixNano()) // nanoseconds since 1970 474 475 // Output: 476 // 2001-09-09 01:46:40 +0000 UTC 477 // 2001-09-09 01:46:40 +0000 UTC 478 // 2001-09-09 01:46:40 +0000 UTC 479 // 1000000000 480 // 1000000000000000000 481} 482 483func ExampleTime_Round() { 484 t := time.Date(0, 0, 0, 12, 15, 30, 918273645, time.UTC) 485 round := []time.Duration{ 486 time.Nanosecond, 487 time.Microsecond, 488 time.Millisecond, 489 time.Second, 490 2 * time.Second, 491 time.Minute, 492 10 * time.Minute, 493 time.Hour, 494 } 495 496 for _, d := range round { 497 fmt.Printf("t.Round(%6s) = %s\n", d, t.Round(d).Format("15:04:05.999999999")) 498 } 499 // Output: 500 // t.Round( 1ns) = 12:15:30.918273645 501 // t.Round( 1µs) = 12:15:30.918274 502 // t.Round( 1ms) = 12:15:30.918 503 // t.Round( 1s) = 12:15:31 504 // t.Round( 2s) = 12:15:30 505 // t.Round( 1m0s) = 12:16:00 506 // t.Round( 10m0s) = 12:20:00 507 // t.Round(1h0m0s) = 12:00:00 508} 509 510func ExampleTime_Truncate() { 511 t, _ := time.Parse("2006 Jan 02 15:04:05", "2012 Dec 07 12:15:30.918273645") 512 trunc := []time.Duration{ 513 time.Nanosecond, 514 time.Microsecond, 515 time.Millisecond, 516 time.Second, 517 2 * time.Second, 518 time.Minute, 519 10 * time.Minute, 520 } 521 522 for _, d := range trunc { 523 fmt.Printf("t.Truncate(%5s) = %s\n", d, t.Truncate(d).Format("15:04:05.999999999")) 524 } 525 // To round to the last midnight in the local timezone, create a new Date. 526 midnight := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, time.Local) 527 _ = midnight 528 529 // Output: 530 // t.Truncate( 1ns) = 12:15:30.918273645 531 // t.Truncate( 1µs) = 12:15:30.918273 532 // t.Truncate( 1ms) = 12:15:30.918 533 // t.Truncate( 1s) = 12:15:30 534 // t.Truncate( 2s) = 12:15:30 535 // t.Truncate( 1m0s) = 12:15:00 536 // t.Truncate(10m0s) = 12:10:00 537} 538 539func ExampleLoadLocation() { 540 location, err := time.LoadLocation("America/Los_Angeles") 541 if err != nil { 542 panic(err) 543 } 544 545 timeInUTC := time.Date(2018, 8, 30, 12, 0, 0, 0, time.UTC) 546 fmt.Println(timeInUTC.In(location)) 547 // Output: 2018-08-30 05:00:00 -0700 PDT 548} 549 550func ExampleLocation() { 551 // China doesn't have daylight saving. It uses a fixed 8 hour offset from UTC. 552 secondsEastOfUTC := int((8 * time.Hour).Seconds()) 553 beijing := time.FixedZone("Beijing Time", secondsEastOfUTC) 554 555 // If the system has a timezone database present, it's possible to load a location 556 // from that, e.g.: 557 // newYork, err := time.LoadLocation("America/New_York") 558 559 // Creating a time requires a location. Common locations are time.Local and time.UTC. 560 timeInUTC := time.Date(2009, 1, 1, 12, 0, 0, 0, time.UTC) 561 sameTimeInBeijing := time.Date(2009, 1, 1, 20, 0, 0, 0, beijing) 562 563 // Although the UTC clock time is 1200 and the Beijing clock time is 2000, Beijing is 564 // 8 hours ahead so the two dates actually represent the same instant. 565 timesAreEqual := timeInUTC.Equal(sameTimeInBeijing) 566 fmt.Println(timesAreEqual) 567 568 // Output: 569 // true 570} 571 572func ExampleTime_Add() { 573 start := time.Date(2009, 1, 1, 12, 0, 0, 0, time.UTC) 574 afterTenSeconds := start.Add(time.Second * 10) 575 afterTenMinutes := start.Add(time.Minute * 10) 576 afterTenHours := start.Add(time.Hour * 10) 577 afterTenDays := start.Add(time.Hour * 24 * 10) 578 579 fmt.Printf("start = %v\n", start) 580 fmt.Printf("start.Add(time.Second * 10) = %v\n", afterTenSeconds) 581 fmt.Printf("start.Add(time.Minute * 10) = %v\n", afterTenMinutes) 582 fmt.Printf("start.Add(time.Hour * 10) = %v\n", afterTenHours) 583 fmt.Printf("start.Add(time.Hour * 24 * 10) = %v\n", afterTenDays) 584 585 // Output: 586 // start = 2009-01-01 12:00:00 +0000 UTC 587 // start.Add(time.Second * 10) = 2009-01-01 12:00:10 +0000 UTC 588 // start.Add(time.Minute * 10) = 2009-01-01 12:10:00 +0000 UTC 589 // start.Add(time.Hour * 10) = 2009-01-01 22:00:00 +0000 UTC 590 // start.Add(time.Hour * 24 * 10) = 2009-01-11 12:00:00 +0000 UTC 591} 592 593func ExampleTime_AddDate() { 594 start := time.Date(2023, 03, 25, 12, 0, 0, 0, time.UTC) 595 oneDayLater := start.AddDate(0, 0, 1) 596 dayDuration := oneDayLater.Sub(start) 597 oneMonthLater := start.AddDate(0, 1, 0) 598 oneYearLater := start.AddDate(1, 0, 0) 599 600 zurich, err := time.LoadLocation("Europe/Zurich") 601 if err != nil { 602 panic(err) 603 } 604 // This was the day before a daylight saving time transition in Zürich. 605 startZurich := time.Date(2023, 03, 25, 12, 0, 0, 0, zurich) 606 oneDayLaterZurich := startZurich.AddDate(0, 0, 1) 607 dayDurationZurich := oneDayLaterZurich.Sub(startZurich) 608 609 fmt.Printf("oneDayLater: start.AddDate(0, 0, 1) = %v\n", oneDayLater) 610 fmt.Printf("oneMonthLater: start.AddDate(0, 1, 0) = %v\n", oneMonthLater) 611 fmt.Printf("oneYearLater: start.AddDate(1, 0, 0) = %v\n", oneYearLater) 612 fmt.Printf("oneDayLaterZurich: startZurich.AddDate(0, 0, 1) = %v\n", oneDayLaterZurich) 613 fmt.Printf("Day duration in UTC: %v | Day duration in Zürich: %v\n", dayDuration, dayDurationZurich) 614 615 // Output: 616 // oneDayLater: start.AddDate(0, 0, 1) = 2023-03-26 12:00:00 +0000 UTC 617 // oneMonthLater: start.AddDate(0, 1, 0) = 2023-04-25 12:00:00 +0000 UTC 618 // oneYearLater: start.AddDate(1, 0, 0) = 2024-03-25 12:00:00 +0000 UTC 619 // oneDayLaterZurich: startZurich.AddDate(0, 0, 1) = 2023-03-26 12:00:00 +0200 CEST 620 // Day duration in UTC: 24h0m0s | Day duration in Zürich: 23h0m0s 621} 622 623func ExampleTime_After() { 624 year2000 := time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC) 625 year3000 := time.Date(3000, 1, 1, 0, 0, 0, 0, time.UTC) 626 627 isYear3000AfterYear2000 := year3000.After(year2000) // True 628 isYear2000AfterYear3000 := year2000.After(year3000) // False 629 630 fmt.Printf("year3000.After(year2000) = %v\n", isYear3000AfterYear2000) 631 fmt.Printf("year2000.After(year3000) = %v\n", isYear2000AfterYear3000) 632 633 // Output: 634 // year3000.After(year2000) = true 635 // year2000.After(year3000) = false 636} 637 638func ExampleTime_Before() { 639 year2000 := time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC) 640 year3000 := time.Date(3000, 1, 1, 0, 0, 0, 0, time.UTC) 641 642 isYear2000BeforeYear3000 := year2000.Before(year3000) // True 643 isYear3000BeforeYear2000 := year3000.Before(year2000) // False 644 645 fmt.Printf("year2000.Before(year3000) = %v\n", isYear2000BeforeYear3000) 646 fmt.Printf("year3000.Before(year2000) = %v\n", isYear3000BeforeYear2000) 647 648 // Output: 649 // year2000.Before(year3000) = true 650 // year3000.Before(year2000) = false 651} 652 653func ExampleTime_Date() { 654 d := time.Date(2000, 2, 1, 12, 30, 0, 0, time.UTC) 655 year, month, day := d.Date() 656 657 fmt.Printf("year = %v\n", year) 658 fmt.Printf("month = %v\n", month) 659 fmt.Printf("day = %v\n", day) 660 661 // Output: 662 // year = 2000 663 // month = February 664 // day = 1 665} 666 667func ExampleTime_Day() { 668 d := time.Date(2000, 2, 1, 12, 30, 0, 0, time.UTC) 669 day := d.Day() 670 671 fmt.Printf("day = %v\n", day) 672 673 // Output: 674 // day = 1 675} 676 677func ExampleTime_Equal() { 678 secondsEastOfUTC := int((8 * time.Hour).Seconds()) 679 beijing := time.FixedZone("Beijing Time", secondsEastOfUTC) 680 681 // Unlike the equal operator, Equal is aware that d1 and d2 are the 682 // same instant but in different time zones. 683 d1 := time.Date(2000, 2, 1, 12, 30, 0, 0, time.UTC) 684 d2 := time.Date(2000, 2, 1, 20, 30, 0, 0, beijing) 685 686 datesEqualUsingEqualOperator := d1 == d2 687 datesEqualUsingFunction := d1.Equal(d2) 688 689 fmt.Printf("datesEqualUsingEqualOperator = %v\n", datesEqualUsingEqualOperator) 690 fmt.Printf("datesEqualUsingFunction = %v\n", datesEqualUsingFunction) 691 692 // Output: 693 // datesEqualUsingEqualOperator = false 694 // datesEqualUsingFunction = true 695} 696 697func ExampleTime_String() { 698 timeWithNanoseconds := time.Date(2000, 2, 1, 12, 13, 14, 15, time.UTC) 699 withNanoseconds := timeWithNanoseconds.String() 700 701 timeWithoutNanoseconds := time.Date(2000, 2, 1, 12, 13, 14, 0, time.UTC) 702 withoutNanoseconds := timeWithoutNanoseconds.String() 703 704 fmt.Printf("withNanoseconds = %v\n", string(withNanoseconds)) 705 fmt.Printf("withoutNanoseconds = %v\n", string(withoutNanoseconds)) 706 707 // Output: 708 // withNanoseconds = 2000-02-01 12:13:14.000000015 +0000 UTC 709 // withoutNanoseconds = 2000-02-01 12:13:14 +0000 UTC 710} 711 712func ExampleTime_Sub() { 713 start := time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC) 714 end := time.Date(2000, 1, 1, 12, 0, 0, 0, time.UTC) 715 716 difference := end.Sub(start) 717 fmt.Printf("difference = %v\n", difference) 718 719 // Output: 720 // difference = 12h0m0s 721} 722 723func ExampleTime_AppendFormat() { 724 t := time.Date(2017, time.November, 4, 11, 0, 0, 0, time.UTC) 725 text := []byte("Time: ") 726 727 text = t.AppendFormat(text, time.Kitchen) 728 fmt.Println(string(text)) 729 730 // Output: 731 // Time: 11:00AM 732} 733 734func ExampleFixedZone() { 735 loc := time.FixedZone("UTC-8", -8*60*60) 736 t := time.Date(2009, time.November, 10, 23, 0, 0, 0, loc) 737 fmt.Println("The time is:", t.Format(time.RFC822)) 738 // Output: The time is: 10 Nov 09 23:00 UTC-8 739} 740