etime.go 2.4 KB

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