time.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. // Package mhayaTime code from: https://github.com/golang-module/carbon
  2. package mhayaTime
  3. import (
  4. "strconv"
  5. "time"
  6. cerr "github.com/mhaya/error"
  7. )
  8. const (
  9. YearsPerMillennium = 1000 // 每千年1000年
  10. YearsPerCentury = 100 // 每世纪100年
  11. YearsPerDecade = 10 // 每十年10年
  12. QuartersPerYear = 4 // 每年4季度
  13. MonthsPerYear = 12 // 每年12月
  14. MonthsPerQuarter = 3 // 每季度3月
  15. WeeksPerNormalYear = 52 // 每常规年52周
  16. weeksPerLongYear = 53 // 每长年53周
  17. WeeksPerMonth = 4 // 每月4周
  18. DaysPerLeapYear = 366 // 每闰年366天
  19. DaysPerNormalYear = 365 // 每常规年365天
  20. DaysPerWeek = 7 // 每周7天
  21. HoursPerWeek = 168 // 每周168小时
  22. HoursPerDay = 24 // 每天24小时
  23. MinutesPerDay = 1440 // 每天1440分钟
  24. MinutesPerHour = 60 // 每小时60分钟
  25. SecondsPerWeek = 604800 // 每周604800秒
  26. SecondsPerDay = 86400 // 每天86400秒
  27. SecondsPerHour = 3600 // 每小时3600秒
  28. SecondsPerMinute = 60 // 每分钟60秒
  29. MillisecondsPerSecond = 1000 // 每秒1000毫秒
  30. MillisecondsPerMinute = 60000 // 每分钟60000毫秒
  31. MillisecondsPerDay = 86400000 // 每天86400000毫秒
  32. MillisecondsPerHour = 3600000 // 每小时3600000毫秒
  33. MicrosecondsPerMillisecond = 1000 // 每毫秒1000微秒
  34. MicrosecondsPerSecond = 1000000 // 每秒1000000微秒
  35. WeeksPerLongYear = 53 // 每长年53周
  36. DateTimeMillisecondFormat = "2006-01-02 15:04:05.000"
  37. DateTimeFormat = "2006-01-02 15:04:05"
  38. DateFormat = "2006-01-02"
  39. TimeFormat = "15:04:05"
  40. ShortDateTimeFormat = "20060102150405"
  41. ShortDateFormat = "20060102"
  42. ShortTimeFormat = "150405"
  43. )
  44. type MhayaTime struct {
  45. time.Time
  46. }
  47. func NewTime(tt time.Time, setGlobal bool) MhayaTime {
  48. ct := MhayaTime{
  49. Time: tt,
  50. }
  51. if setGlobal {
  52. ct.Time = tt.In(offsetLocation).Add(offsetTime)
  53. }
  54. return ct
  55. }
  56. func NewSecond(second int64) MhayaTime {
  57. return NewTime(time.Unix(second, 0), true)
  58. }
  59. func NewMillisecond(millisecond int64) MhayaTime {
  60. return NewTime(time.UnixMilli(millisecond), true)
  61. }
  62. func Now() MhayaTime {
  63. return NewTime(time.Now(), true)
  64. }
  65. func Yesterday() MhayaTime {
  66. t := time.Now().AddDate(0, 0, -1)
  67. return NewTime(t, true)
  68. }
  69. func Tomorrow() MhayaTime {
  70. t := Now().AddDate(0, 0, 1)
  71. return NewTime(t, true)
  72. }
  73. // CreateFromTimestamp 从时间戳创建 Carbon 实例
  74. func CreateFromTimestamp(timestamp int64) MhayaTime {
  75. var ts int64
  76. switch len(strconv.FormatInt(timestamp, 10)) {
  77. case 10:
  78. ts = timestamp
  79. case 13:
  80. ts = timestamp / 1e3
  81. case 16:
  82. ts = timestamp / 1e6
  83. case 19:
  84. ts = timestamp / 1e9
  85. default:
  86. ts = 0
  87. }
  88. t := time.Unix(ts, 0)
  89. return NewTime(t, false)
  90. }
  91. // CreateFromDateTime 从年月日时分秒创建 Carbon 实例
  92. func CreateFromDateTime(year int, month int, day int, hour int, minute int, second int) MhayaTime {
  93. t := time.Date(year, time.Month(month), day, hour, minute, second, 0, offsetLocation)
  94. return NewTime(t, false)
  95. }
  96. // CreateFromDate 从年月日创建 Carbon 实例(默认时区)
  97. func CreateFromDate(year int, month int, day int) MhayaTime {
  98. now := Now()
  99. t := time.Date(year, time.Month(month), day, now.Hour(), now.Minute(), now.Second(), 0, now.Location())
  100. return NewTime(t, false)
  101. }
  102. // CreateFromTime 从时分秒创建 Carbon 实例(默认时区)
  103. func CreateFromTime(hour int, minute int, second int) MhayaTime {
  104. now := Now()
  105. t := time.Date(now.Year(), now.Time.Month(), now.Day(), hour, minute, second, 0, now.Location())
  106. return NewTime(t, false)
  107. }
  108. // ParseByDuration 通过持续时间解析
  109. func ParseByDuration(duration string) (time.Duration, error) {
  110. td, err := time.ParseDuration(duration)
  111. if err != nil {
  112. err = cerr.Errorf("invalid duration %s", duration)
  113. }
  114. return td, err
  115. }
  116. // GetAbsValue 获取绝对值
  117. func GetAbsValue(value int64) int64 {
  118. return (value ^ value>>31) - value>>31
  119. }