import transactions from ofx 2.x file

This commit is contained in:
MaysWind
2024-10-28 00:33:21 +08:00
parent 22d653cc76
commit c372272394
11 changed files with 645 additions and 0 deletions
+23
View File
@@ -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
+43
View File
@@ -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")