gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. // Copyright 2017 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package timeutil
  4. import (
  5. "time"
  6. "code.gitea.io/gitea/modules/setting"
  7. )
  8. // TimeStamp defines a timestamp
  9. type TimeStamp int64
  10. var (
  11. // mockNow is NOT concurrency-safe!!
  12. mockNow time.Time
  13. // Used for IsZero, to check if timestamp is the zero time instant.
  14. timeZeroUnix = time.Time{}.Unix()
  15. )
  16. // MockSet sets the time to a mocked time.Time
  17. func MockSet(now time.Time) func() {
  18. mockNow = now
  19. return MockUnset
  20. }
  21. // MockUnset will unset the mocked time.Time
  22. func MockUnset() {
  23. mockNow = time.Time{}
  24. }
  25. // TimeStampNow returns now int64
  26. func TimeStampNow() TimeStamp {
  27. if !mockNow.IsZero() {
  28. return TimeStamp(mockNow.Unix())
  29. }
  30. return TimeStamp(time.Now().Unix())
  31. }
  32. // Add adds seconds and return sum
  33. func (ts TimeStamp) Add(seconds int64) TimeStamp {
  34. return ts + TimeStamp(seconds)
  35. }
  36. // AddDuration adds time.Duration and return sum
  37. func (ts TimeStamp) AddDuration(interval time.Duration) TimeStamp {
  38. return ts + TimeStamp(interval/time.Second)
  39. }
  40. // Year returns the time's year
  41. func (ts TimeStamp) Year() int {
  42. return ts.AsTime().Year()
  43. }
  44. // AsTime convert timestamp as time.Time in Local locale
  45. func (ts TimeStamp) AsTime() (tm time.Time) {
  46. return ts.AsTimeInLocation(setting.DefaultUILocation)
  47. }
  48. // AsLocalTime convert timestamp as time.Time in local location
  49. func (ts TimeStamp) AsLocalTime() time.Time {
  50. return time.Unix(int64(ts), 0)
  51. }
  52. // AsTimeInLocation convert timestamp as time.Time in Local locale
  53. func (ts TimeStamp) AsTimeInLocation(loc *time.Location) time.Time {
  54. return time.Unix(int64(ts), 0).In(loc)
  55. }
  56. // AsTimePtr convert timestamp as *time.Time in Local locale
  57. func (ts TimeStamp) AsTimePtr() *time.Time {
  58. return ts.AsTimePtrInLocation(setting.DefaultUILocation)
  59. }
  60. // AsTimePtrInLocation convert timestamp as *time.Time in customize location
  61. func (ts TimeStamp) AsTimePtrInLocation(loc *time.Location) *time.Time {
  62. tm := time.Unix(int64(ts), 0).In(loc)
  63. return &tm
  64. }
  65. // Format formats timestamp as given format
  66. func (ts TimeStamp) Format(f string) string {
  67. return ts.FormatInLocation(f, setting.DefaultUILocation)
  68. }
  69. // FormatInLocation formats timestamp as given format with spiecific location
  70. func (ts TimeStamp) FormatInLocation(f string, loc *time.Location) string {
  71. return ts.AsTimeInLocation(loc).Format(f)
  72. }
  73. // FormatDate formats a date in YYYY-MM-DD
  74. func (ts TimeStamp) FormatDate() string {
  75. return ts.Format("2006-01-02")
  76. }
  77. // IsZero is zero time
  78. func (ts TimeStamp) IsZero() bool {
  79. return int64(ts) == 0 || int64(ts) == timeZeroUnix
  80. }