فهرست منبع

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 {