aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2023-03-05 15:42:08 +0100
committerMartin Polden <mpolden@mpolden.no>2023-03-05 15:42:40 +0100
commit7cc8a23dd07c7cec3c5a978379ff66653e5f6f26 (patch)
tree7cf9578dfd28ae619f7c91f859f8fce00e11844e
parent363be0273f10883e7224a33ae6311aaf30cdc822 (diff)
dnb: extract function
-rw-r--r--record/dnb/dnb.go22
1 files changed, 15 insertions, 7 deletions
diff --git a/record/dnb/dnb.go b/record/dnb/dnb.go
index 7a66a4c..cc7caf4 100644
--- a/record/dnb/dnb.go
+++ b/record/dnb/dnb.go
@@ -50,6 +50,19 @@ func (r *Reader) parseAmount(s string) (int64, error) {
return n, nil
}
+func parseExcelDate(s string) (time.Time, error) {
+ f, err := strconv.ParseFloat(s, 64)
+ if err != nil {
+ return time.Time{}, fmt.Errorf("invalid time value: %q: %w", s, err)
+ }
+ t, err := excelize.ExcelDateToTime(f, false)
+ if err != nil {
+ return time.Time{}, fmt.Errorf("invalid date: %f: %w", f, err)
+ }
+ // Time resolution is days, but time zone conversion may add offset
+ return t.Truncate(24 * time.Hour), nil
+}
+
func (r *Reader) Read() ([]record.Record, error) {
data, err := excelize.OpenReader(r.rd)
if err != nil {
@@ -74,15 +87,10 @@ func (r *Reader) Read() ([]record.Record, error) {
if cells[0] == "" { // Missing date
continue
}
- excelTime, err := strconv.ParseFloat(cells[0], 64)
- if err != nil {
- return nil, fmt.Errorf("invalid time value: %q: %w", cells[0], err)
- }
- recordTime, err := excelize.ExcelDateToTime(excelTime, false)
+ recordTime, err := parseExcelDate(cells[0])
if err != nil {
- return nil, fmt.Errorf("invalid date: %f: %w", excelTime, err)
+ return nil, err
}
- recordTime = recordTime.Truncate(24 * time.Hour)
amountIn, err := r.parseAmount(cells[4])
if err != nil {
return nil, fmt.Errorf("invalid amount: %q: %w", cells[4], err)