瀏覽代碼

Update date parser to fix another time zone issue

The Washington Post has its feeds with EST, which is getting parsed by miniflux as UTC, and showing up as 8 hours off.

See http://feeds.washingtonpost.com/rss/politics for an example.

This fix applies a similar workaround for EST/EDT as was done for PST/PDT.
Nick Chitwood 5 年之前
父節點
當前提交
793f475edd
共有 2 個文件被更改,包括 32 次插入0 次删除
  1. 4 0
      reader/date/parser.go
  2. 28 0
      reader/date/parser_test.go

+ 4 - 0
reader/date/parser.go

@@ -340,5 +340,9 @@ func parseLocalTimeDates(layout, ds string) (t time.Time, err error) {
 		loc, _ = time.LoadLocation("America/Los_Angeles")
 	}
 
+	if strings.HasSuffix(ds, "EST") || strings.HasSuffix(ds, "EDT") {
+		loc, _ = time.LoadLocation("America/New_York")
+	}
+
 	return time.ParseInLocation(layout, ds, loc)
 }

+ 28 - 0
reader/date/parser_test.go

@@ -96,6 +96,34 @@ func TestParseRSSDatePST(t *testing.T) {
 	}
 }
 
+func TestParseRSSDateEST(t *testing.T) {
+	date, err := Parse("Wed, 10 Feb 2021 22:46:00 EST")
+	if err != nil {
+		t.Fatalf(`RSS dates with EST timezone should be parsed correctly: %v`, err)
+	}
+
+	expectedTS := int64(1613015160)
+	if date.Unix() != expectedTS {
+		t.Errorf(`The Unix timestamp should be %v instead of %v`, expectedTS, date.Unix())
+	}
+
+	expectedLocation := "America/New_York"
+	if date.Location().String() != expectedLocation {
+		t.Errorf(`The location should be %q instead of %q`, expectedLocation, date.Location())
+	}
+
+	name, offset := date.Zone()
+
+	expectedName := "EST"
+	if name != expectedName {
+		t.Errorf(`The zone name should be %q instead of %q`, expectedName, name)
+	}
+
+	expectedOffset := -18000
+	if offset != expectedOffset {
+		t.Errorf(`The offset should be %v instead of %v`, expectedOffset, offset)
+	}
+}
 func TestParseRSSDateOffset(t *testing.T) {
 	date, err := Parse("Sun, 28 Oct 2018 13:48:00 +0100")
 	if err != nil {