summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-08-12 16:53:52 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-08-12 16:53:52 +0200
commit04756f74275feb47b71fdbf2de8fefdf005fd014 (patch)
tree3610bc56ceb776908e99293a1bef22ae7207beb5
parentd5995078d7a198708f31e7954457e9a620b1888e (diff)
Fix time parsing
-rw-r--r--rss.go18
1 files changed, 10 insertions, 8 deletions
diff --git a/rss.go b/rss.go
index c9413b2..a6f2de8 100644
--- a/rss.go
+++ b/rss.go
@@ -3,6 +3,7 @@ package rss
import (
"encoding/xml"
+ "errors"
"net/http"
"strings"
"time"
@@ -41,22 +42,23 @@ type Item struct {
PubDate Time `xml:"pubDate"`
}
-const altFormat = `Mon, 2 Jan 2006 15:04:05 -0700`
+var formats = []string{
+ `Mon, _2 Jan 2006 15:04:05 -0700`, // like RFC1123Z
+ `Mon, _2 Jan 2006 15:04:05 MST`, // like RFC1123
+}
// UnmarshalXML decodes Time format
func (t *Time) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
var v string
d.DecodeElement(&v, &start)
v = strings.TrimSpace(v)
- parse, err := time.Parse(time.RFC1123, v)
- if err != nil {
- parse, err = time.Parse(altFormat, v)
- if err != nil {
- return err
+ for _, f := range formats {
+ if parse, err := time.Parse(f, v); err == nil {
+ *t = Time{parse}
+ return nil
}
}
- *t = Time{parse}
- return nil
+ return errors.New(v)
}
// Fetch and parse RSS from given URL