add parse timezone method

This commit is contained in:
MaysWind
2021-04-18 22:54:50 +08:00
parent 1bd21b5cda
commit f3381a3149
2 changed files with 74 additions and 0 deletions
+43
View File
@@ -2,7 +2,10 @@ package utils
import (
"fmt"
"strings"
"time"
"github.com/mayswind/ezbookkeeping/pkg/errs"
)
const (
@@ -74,6 +77,46 @@ func FormatTimezoneOffset(timezone *time.Location) string {
return fmt.Sprintf("%s%02d:%02d", sign, hourAbsOffset, minuteAbsOffset)
}
// ParseFromTimezoneOffset parses a formatted string in timezone offset format
func ParseFromTimezoneOffset(tzOffset string) (*time.Location, error) {
if len(tzOffset) != 6 { // +/-HH:MM
return nil, errs.ErrFormatInvalid
}
sign := tzOffset[0]
if sign != '-' && sign != '+' {
return nil, errs.ErrFormatInvalid
}
offsets := strings.Split(tzOffset[1:], ":")
if len(offsets) != 2 {
return nil, errs.ErrFormatInvalid
}
hourAbsOffset, err := StringToInt32(offsets[0])
if err != nil {
return nil, err
}
minuteAbsOffset, err := StringToInt32(offsets[1])
if err != nil {
return nil, err
}
totalMinuteOffset := hourAbsOffset*60 + minuteAbsOffset
if sign == '-' {
totalMinuteOffset = -totalMinuteOffset
}
totalOffset := totalMinuteOffset * 60
return time.FixedZone("Timezone", totalOffset), nil
}
// GetMinTransactionTimeFromUnixTime returns the minimum transaction time from unix time
func GetMinTransactionTimeFromUnixTime(unixTime int64) int64 {
return unixTime * 1000