import transactions from ofx 2.x file
This commit is contained in:
@@ -216,6 +216,29 @@ func FormatTimezoneOffset(timezone *time.Location) string {
|
||||
return fmt.Sprintf("%s%02d:%02d", sign, hourAbsOffset, minuteAbsOffset)
|
||||
}
|
||||
|
||||
// FormatTimezoneOffsetFromHoursOffset returns "+/-HH:MM" format of timezone from hours offset
|
||||
func FormatTimezoneOffsetFromHoursOffset(hoursOffset string) (string, error) {
|
||||
hoursOffsetValue, err := StringToFloat64(hoursOffset)
|
||||
|
||||
if err != nil {
|
||||
return "", errs.ErrFormatInvalid
|
||||
}
|
||||
|
||||
tzMinutesOffset := int16(hoursOffsetValue * 60)
|
||||
|
||||
sign := "+"
|
||||
hourAbsOffset := tzMinutesOffset / 60
|
||||
minuteAbsOffset := tzMinutesOffset % 60
|
||||
|
||||
if hourAbsOffset < 0 {
|
||||
sign = "-"
|
||||
hourAbsOffset = -hourAbsOffset
|
||||
minuteAbsOffset = -minuteAbsOffset
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%s%02d:%02d", sign, hourAbsOffset, minuteAbsOffset), nil
|
||||
}
|
||||
|
||||
// ParseFromTimezoneOffset parses a formatted string in timezone offset format
|
||||
func ParseFromTimezoneOffset(tzOffset string) (*time.Location, error) {
|
||||
if len(tzOffset) != 6 { // +/-HH:MM
|
||||
|
||||
@@ -5,6 +5,8 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
||||
)
|
||||
|
||||
func TestParseNumericYearMonth(t *testing.T) {
|
||||
@@ -259,6 +261,47 @@ func TestFormatTimezoneOffset(t *testing.T) {
|
||||
assert.Equal(t, expectedValue, actualValue)
|
||||
}
|
||||
|
||||
func TestFormatTimezoneOffsetFromHoursOffset(t *testing.T) {
|
||||
expectedValue := "+02:00"
|
||||
actualValue, err := FormatTimezoneOffsetFromHoursOffset("2")
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, expectedValue, actualValue)
|
||||
|
||||
expectedValue = "+05:45"
|
||||
actualValue, err = FormatTimezoneOffsetFromHoursOffset("+5.75")
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, expectedValue, actualValue)
|
||||
|
||||
expectedValue = "-12:00"
|
||||
actualValue, err = FormatTimezoneOffsetFromHoursOffset("-12.00")
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, expectedValue, actualValue)
|
||||
|
||||
expectedValue = "-02:30"
|
||||
actualValue, err = FormatTimezoneOffsetFromHoursOffset("-2.5")
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, expectedValue, actualValue)
|
||||
|
||||
expectedValue = "+00:00"
|
||||
actualValue, err = FormatTimezoneOffsetFromHoursOffset("0")
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, expectedValue, actualValue)
|
||||
}
|
||||
|
||||
func TestFormatTimezoneOffsetFromHoursOffset_InvalidHoursOffset(t *testing.T) {
|
||||
_, err := FormatTimezoneOffsetFromHoursOffset("")
|
||||
assert.EqualError(t, err, errs.ErrFormatInvalid.Message)
|
||||
|
||||
_, err = FormatTimezoneOffsetFromHoursOffset("+")
|
||||
assert.EqualError(t, err, errs.ErrFormatInvalid.Message)
|
||||
|
||||
_, err = FormatTimezoneOffsetFromHoursOffset("-")
|
||||
assert.EqualError(t, err, errs.ErrFormatInvalid.Message)
|
||||
|
||||
_, err = FormatTimezoneOffsetFromHoursOffset("a")
|
||||
assert.EqualError(t, err, errs.ErrFormatInvalid.Message)
|
||||
}
|
||||
|
||||
func TestParseFromTimezoneOffset(t *testing.T) {
|
||||
expectedValue := time.FixedZone("Timezone", 120*60)
|
||||
actualValue, err := ParseFromTimezoneOffset("+02:00")
|
||||
|
||||
Reference in New Issue
Block a user