| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package parsetime
- import (
- "strings"
- "sync"
- . "gitp78su.ipnodns.ru/svi/kern/kc/helpers"
- "wartank/pkg/components/parsetime/parsehour"
- "wartank/pkg/components/parsetime/parsemin"
- "wartank/pkg/components/parsetime/parsesec"
- )
- /*
- Выковыривает из строки время и потокобезопасно хранит его
- */
- // ParseTime -- потокобезопасный ковырятор строки времени
- type ParseTime struct {
- intVal int // Числовое значение хранимого времени
- hour *parsehour.ParseHour // Часы метки времени
- min *parsemin.ParseMin // Минуты метки времени
- sec *parsesec.ParseSec // Секунды метки времени
- block sync.RWMutex
- }
- // NewParseTime -- возвращает новый *ParseTime
- func NewParseTime() *ParseTime {
- return &ParseTime{
- hour: parsehour.NewParseHour(),
- min: parsemin.NewParseMin(),
- sec: parsesec.NewParseSec(),
- }
- }
- // GetInt -- возвращает хранимоесчётчика времени
- func (sf *ParseTime) Get() int {
- sf.block.RLock()
- defer sf.block.RUnlock()
- return sf.intVal
- }
- // Parse -- разбирает строковое представление на части
- func (sf *ParseTime) Parse(strTime string) {
- sf.block.Lock()
- defer sf.block.Unlock()
- Hassert(strTime != "", "CountTime.Set(): val is empty")
- // Разбить время, перевести в секунды
- lstTime := strings.Split(strTime, ":")
- if len(lstTime) == 1 { // Только секунды
- sf.hour.Reset()
- sf.min.Reset()
- sf.sec.Parse(lstTime[0])
- }
- if len(lstTime) == 2 { // Минуты, секунды
- sf.hour.Reset()
- sf.min.Parse(lstTime[0])
- sf.sec.Parse(lstTime[1])
- }
- if len(lstTime) >= 3 { // Есть всё, возможно с левыми полями в конце
- strHour := lstTime[0]
- strMin := lstTime[1]
- strSec := lstTime[2]
- sf.sec.Parse(strSec)
- sf.min.Parse(strMin)
- sf.hour.Parse(strHour)
- }
- sf.intVal = sf.hour.Get()*3600 + sf.min.Get()*60 + sf.sec.Get()
- }
- // Hour -- возвращает хранимые часы
- func (sf *ParseTime) Hour() *parsehour.ParseHour {
- return sf.hour
- }
- // Min -- возвращает хранимые минуты
- func (sf *ParseTime) Min() *parsemin.ParseMin {
- return sf.min
- }
- // Sec -- возвращает хранимые секунды
- func (sf *ParseTime) Sec() *parsesec.ParseSec {
- return sf.sec
- }
- // String -- возвращает хранимое время
- func (sf *ParseTime) String() string {
- res := sf.hour.String() + ":" + sf.min.String() + ":" + sf.sec.String()
- return res
- }
|