zone.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package tfelem
  2. import (
  3. "git.swzry.com/zry/YAGTF/yagtf/utils"
  4. "strconv"
  5. "time"
  6. )
  7. type TimeZoneElement struct {
  8. UseAbbr bool
  9. UseUTCOffset bool
  10. Fill bool
  11. }
  12. func (this *TimeZoneElement) ExpectedSize() int {
  13. if this.UseAbbr {
  14. return 3
  15. } else {
  16. if this.UseUTCOffset {
  17. return 5
  18. } else {
  19. return 5
  20. }
  21. }
  22. }
  23. func (this *TimeZoneElement) PrintElement(t time.Time) string {
  24. tzn, tzo := t.Zone()
  25. if this.UseAbbr {
  26. return tzn
  27. } else {
  28. if this.UseUTCOffset {
  29. zm := utils.IntDivWithRound(tzo, 60)
  30. zh := utils.IntDivWithRound(tzo, 3600)
  31. if zm < 0 {
  32. zm = -zm
  33. zh = -zh
  34. zhm := zm - zh*60
  35. ztxt := zh*100 + zhm
  36. return "-" + utils.GetFilledNumberWithTruncate(ztxt, 4)
  37. } else {
  38. zhm := zm - zh*60
  39. ztxt := zh*100 + zhm
  40. return "+" + utils.GetFilledNumberWithTruncate(ztxt, 4)
  41. }
  42. } else {
  43. if this.Fill {
  44. return utils.GetFilledNumberWithTruncate(tzo, 5)
  45. } else {
  46. return strconv.Itoa(tzo)
  47. }
  48. }
  49. }
  50. }
  51. func NewTimeZoneAbbrElement() *TimeZoneElement {
  52. return &TimeZoneElement{
  53. UseAbbr: true,
  54. UseUTCOffset: false,
  55. Fill: false,
  56. }
  57. }
  58. func NewTimeZoneUTCOffsetElement() *TimeZoneElement {
  59. return &TimeZoneElement{
  60. UseAbbr: false,
  61. UseUTCOffset: true,
  62. Fill: false,
  63. }
  64. }
  65. func NewTimeZoneNumbericOffsetElement(fill bool) *TimeZoneElement {
  66. return &TimeZoneElement{
  67. UseAbbr: false,
  68. UseUTCOffset: false,
  69. Fill: fill,
  70. }
  71. }