You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
2.5 KiB

4 years ago
  1. package schedule
  2. import (
  3. "fmt"
  4. "log"
  5. "reflect"
  6. "strings"
  7. "time"
  8. )
  9. // 获取两个时间点之间的天数
  10. func GetCrossDays(t1,t2 time.Time)(days int){
  11. var(
  12. y1,d1,y2,d2 int
  13. m1,m2 time.Month
  14. date1,date2 time.Time
  15. )
  16. days = 0
  17. if t1.Unix() >= t2.Unix() {
  18. return
  19. }
  20. y1,m1,d1 = t1.Date()
  21. y2,m2,d2 = t2.Date()
  22. date1 = time.Date(y1, m1, d1, 0, 0, 0, 0, time.UTC)
  23. date2 = time.Date(y2, m2, d2, 0, 0, 0, 0, time.UTC)
  24. days = int(date2.Sub(date1).Hours() / 24)
  25. return
  26. }
  27. // 获取时间点的日期,以年月日字符类型数据返回
  28. func GetYMDString(t time.Time)(ymd string){
  29. var (
  30. y1, d1 int
  31. m1 time.Month
  32. )
  33. y1,m1,d1 = t.Date()
  34. ymd = fmt.Sprintf("%04d", y1) + fmt.Sprintf("%02d", int(m1)) + fmt.Sprintf("%02d", d1)
  35. return
  36. }
  37. // 基于时间单位获取秒数
  38. func GetTimeUomSeconds(uomId string)(seconds float64){
  39. seconds = 0
  40. switch strings.ToUpper(uomId) {
  41. case TIME_UOM_WEEK:
  42. seconds = 7 * 24 * 3600
  43. case TIME_UOM_DAY:
  44. seconds = 24 * 3600
  45. case TIME_UOM_HOUR:
  46. seconds = 3600
  47. case TIME_UOM_MINUTE:
  48. seconds = 60
  49. case TIME_UOM_SECOND:
  50. seconds = 1
  51. }
  52. return
  53. }
  54. // 设置表的更新时间
  55. func SetTableLastModify(sp interface{},s interface{}, setMode string, lastUser string){
  56. var (
  57. hasLastmodify, hasLastuser, hasCreatetime bool
  58. )
  59. avp := reflect.ValueOf(sp)
  60. av := reflect.ValueOf(s)
  61. at := reflect.TypeOf(s)
  62. // 简单判断下是否为结构体
  63. if at.Kind() != reflect.Struct {
  64. log.Printf("s must be a struct")
  65. return
  66. }
  67. // 判断是否有LastModify
  68. hasLastmodify = false
  69. hasLastuser = false
  70. hasCreatetime = false
  71. avp = reflect.ValueOf(avp.Interface())
  72. for i := 0; i < av.NumField(); i++ {
  73. if at.Field(i).Name == "Lastmodify" {
  74. hasLastmodify = true
  75. }
  76. if at.Field(i).Name == "Lastuser" {
  77. hasLastuser = true
  78. }
  79. if at.Field(i).Name == "Createtime" {
  80. hasCreatetime = true
  81. }
  82. }
  83. if hasLastmodify && hasLastuser && hasCreatetime {
  84. switch setMode {
  85. case MODIFY_MODE_CREATE:
  86. f1 := avp.Elem().FieldByName("Createtime")
  87. f1.Set(reflect.ValueOf(time.Now()))
  88. f2 := avp.Elem().FieldByName("Lastuser")
  89. if lastUser != ""{
  90. f2.Set(reflect.ValueOf(lastUser))
  91. }else{
  92. f2.Set(reflect.ValueOf("sys_service"))
  93. }
  94. case MODIFY_MODE_UPDATE:
  95. f1 := avp.Elem().FieldByName("Lastmodify")
  96. f1.Set(reflect.ValueOf(time.Now()))
  97. f2 := avp.Elem().FieldByName("Lastuser")
  98. if lastUser != ""{
  99. f2.Set(reflect.ValueOf(lastUser))
  100. }else{
  101. f2.Set(reflect.ValueOf("sys_service"))
  102. }
  103. case MODIFY_MODE_DELETE:
  104. }
  105. }
  106. }