diff options
author | Martin Polden <mpolden@mpolden.no> | 2023-03-05 15:42:08 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2023-03-05 15:42:40 +0100 |
commit | 7cc8a23dd07c7cec3c5a978379ff66653e5f6f26 (patch) | |
tree | 7cf9578dfd28ae619f7c91f859f8fce00e11844e | |
parent | 363be0273f10883e7224a33ae6311aaf30cdc822 (diff) |
dnb: extract function
-rw-r--r-- | record/dnb/dnb.go | 22 |
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) |