etime.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package etime
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "time"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
  8. mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
  9. )
  10. // ETime -- метка времени.
  11. // Вывод: "2006-01-02 15:04:05.000 -07 MST".
  12. type ETime struct {
  13. val defs.Time
  14. isMut bool // Мутабельность
  15. isFill bool // Признак заполнения
  16. }
  17. // NewETime -- создает новый экземпляр ETime.
  18. func NewETime(val defs.Time) mKs.ITime {
  19. helpers.Hassert(val != "", "NewETime(): val is empty")
  20. sf := &ETime{
  21. val: val,
  22. isFill: true,
  23. }
  24. return sf
  25. }
  26. // NewETimeAuto -- создаёт фиксированную авто-метку времени.
  27. func NewETimeAuto() mKs.ITime {
  28. sf := &ETime{
  29. isFill: true,
  30. }
  31. val := time.Now().Local().Format("2006-01-02 15:04:05.000 -07 MST")
  32. sf.Set(defs.Time(val))
  33. return sf
  34. }
  35. // NewETimeAutoMut -- создаёт изменяемую авто-метку времени.
  36. func NewETimeAutoMut() mKs.ITimeMut {
  37. sf := &ETime{
  38. isFill: true,
  39. isMut: true,
  40. }
  41. val := time.Now().Local().Format("2006-01-02 15:04:05.000 -07 MST")
  42. sf.Set(defs.Time(val))
  43. return sf
  44. }
  45. // String -- возвращает строку.
  46. func (sf *ETime) String() string {
  47. helpers.Hassert(sf.val != "", "ETime.String(): значение не инициализировано")
  48. return string(sf.val)
  49. }
  50. // Get -- возвращает типизированную строку.
  51. func (sf *ETime) Get() defs.Time {
  52. helpers.Hassert(sf.val != "", "ETime.Get(): значение не инициализировано")
  53. return sf.val
  54. }
  55. // Set -- устанавливает типизированное значение.
  56. func (sf *ETime) Set(val defs.Time) {
  57. helpers.Hassert(sf.isMut, "ETime.Set(): значение фиксировано")
  58. helpers.Hassert(val != "", "ETime.Set(): val is empty")
  59. sf.val = val
  60. }
  61. // MarshalJSON -- сериализует себя в строку.
  62. func (sf *ETime) MarshalJSON() ([]byte, error) {
  63. binMsg, err := json.Marshal(sf)
  64. if err != nil {
  65. err = fmt.Errorf("ETime.MarshalJSON(): in self marshall, err=\n\t%w", err)
  66. return nil, err
  67. }
  68. return binMsg, err
  69. }
  70. // UnmarshalJSON -- десериализует из строки.
  71. func (sf *ETime) UnmarshalJSON(binMsg []byte) error {
  72. if err := json.Unmarshal(binMsg, sf); err != nil {
  73. return fmt.Errorf("ETime.UnmarshalJSON(): in self unmarshall, err=\n\t%w", err)
  74. }
  75. return nil
  76. }