dateparser.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. package shared
  2. import (
  3. "fmt"
  4. "strings"
  5. "time"
  6. )
  7. // DateFormats taken from github.com/mjibson/goread
  8. var dateFormats = []string{
  9. time.RFC822, // RSS
  10. time.RFC822Z, // RSS
  11. time.RFC3339, // Atom
  12. time.UnixDate,
  13. time.RubyDate,
  14. time.RFC850,
  15. time.RFC1123Z,
  16. time.RFC1123,
  17. time.ANSIC,
  18. "Mon, January 2 2006 15:04:05 -0700",
  19. "Mon, January 02, 2006, 15:04:05 MST",
  20. "Mon, January 02, 2006 15:04:05 MST",
  21. "Mon, Jan 2, 2006 15:04 MST",
  22. "Mon, Jan 2 2006 15:04 MST",
  23. "Mon, Jan 2, 2006 15:04:05 MST",
  24. "Mon, Jan 2 2006 15:04:05 -700",
  25. "Mon, Jan 2 2006 15:04:05 -0700",
  26. "Mon Jan 2 15:04 2006",
  27. "Mon Jan 2 15:04:05 2006 MST",
  28. "Mon Jan 02, 2006 3:04 pm",
  29. "Mon, Jan 02,2006 15:04:05 MST",
  30. "Mon Jan 02 2006 15:04:05 -0700",
  31. "Monday, January 2, 2006 15:04:05 MST",
  32. "Monday, January 2, 2006 03:04 PM",
  33. "Monday, January 2, 2006",
  34. "Monday, January 02, 2006",
  35. "Monday, 2 January 2006 15:04:05 MST",
  36. "Monday, 2 January 2006 15:04:05 -0700",
  37. "Monday, 2 Jan 2006 15:04:05 MST",
  38. "Monday, 2 Jan 2006 15:04:05 -0700",
  39. "Monday, 02 January 2006 15:04:05 MST",
  40. "Monday, 02 January 2006 15:04:05 -0700",
  41. "Monday, 02 January 2006 15:04:05",
  42. "Mon, 2 January 2006 15:04 MST",
  43. "Mon, 2 January 2006, 15:04 -0700",
  44. "Mon, 2 January 2006, 15:04:05 MST",
  45. "Mon, 2 January 2006 15:04:05 MST",
  46. "Mon, 2 January 2006 15:04:05 -0700",
  47. "Mon, 2 January 2006",
  48. "Mon, 2 Jan 2006 3:04:05 PM -0700",
  49. "Mon, 2 Jan 2006 15:4:5 MST",
  50. "Mon, 2 Jan 2006 15:4:5 -0700 GMT",
  51. "Mon, 2, Jan 2006 15:4",
  52. "Mon, 2 Jan 2006 15:04 MST",
  53. "Mon, 2 Jan 2006, 15:04 -0700",
  54. "Mon, 2 Jan 2006 15:04 -0700",
  55. "Mon, 2 Jan 2006 15:04:05 UT",
  56. "Mon, 2 Jan 2006 15:04:05MST",
  57. "Mon, 2 Jan 2006 15:04:05 MST",
  58. "Mon 2 Jan 2006 15:04:05 MST",
  59. "mon,2 Jan 2006 15:04:05 MST",
  60. "Mon, 2 Jan 2006 15:04:05 -0700 MST",
  61. "Mon, 2 Jan 2006 15:04:05-0700",
  62. "Mon, 2 Jan 2006 15:04:05 -0700",
  63. "Mon, 2 Jan 2006 15:04:05",
  64. "Mon, 2 Jan 2006 15:04",
  65. "Mon,2 Jan 2006",
  66. "Mon, 2 Jan 2006",
  67. "Mon, 2 Jan 15:04:05 MST",
  68. "Mon, 2 Jan 06 15:04:05 MST",
  69. "Mon, 2 Jan 06 15:04:05 -0700",
  70. "Mon, 2006-01-02 15:04",
  71. "Mon,02 January 2006 14:04:05 MST",
  72. "Mon, 02 January 2006",
  73. "Mon, 02 Jan 2006 3:04:05 PM MST",
  74. "Mon, 02 Jan 2006 15 -0700",
  75. "Mon,02 Jan 2006 15:04 MST",
  76. "Mon, 02 Jan 2006 15:04 MST",
  77. "Mon, 02 Jan 2006 15:04 -0700",
  78. "Mon, 02 Jan 2006 15:04:05 Z",
  79. "Mon, 02 Jan 2006 15:04:05 UT",
  80. "Mon, 02 Jan 2006 15:04:05 MST-07:00",
  81. "Mon, 02 Jan 2006 15:04:05 MST -0700",
  82. "Mon, 02 Jan 2006, 15:04:05 MST",
  83. "Mon, 02 Jan 2006 15:04:05MST",
  84. "Mon, 02 Jan 2006 15:04:05 MST",
  85. "Mon , 02 Jan 2006 15:04:05 MST",
  86. "Mon, 02 Jan 2006 15:04:05 GMT-0700",
  87. "Mon,02 Jan 2006 15:04:05 -0700",
  88. "Mon, 02 Jan 2006 15:04:05 -0700",
  89. "Mon, 02 Jan 2006 15:04:05 -07:00",
  90. "Mon, 02 Jan 2006 15:04:05 --0700",
  91. "Mon 02 Jan 2006 15:04:05 -0700",
  92. "Mon, 02 Jan 2006 15:04:05 -07",
  93. "Mon, 02 Jan 2006 15:04:05 00",
  94. "Mon, 02 Jan 2006 15:04:05",
  95. "Mon, 02 Jan 2006",
  96. "Mon, 02 Jan 06 15:04:05 MST",
  97. "January 2, 2006 3:04 PM",
  98. "January 2, 2006, 3:04 p.m.",
  99. "January 2, 2006 15:04:05 MST",
  100. "January 2, 2006 15:04:05",
  101. "January 2, 2006 03:04 PM",
  102. "January 2, 2006",
  103. "January 02, 2006 15:04:05 MST",
  104. "January 02, 2006 15:04",
  105. "January 02, 2006 03:04 PM",
  106. "January 02, 2006",
  107. "Jan 2, 2006 3:04:05 PM MST",
  108. "Jan 2, 2006 3:04:05 PM",
  109. "Jan 2, 2006 15:04:05 MST",
  110. "Jan 2, 2006",
  111. "Jan 02 2006 03:04:05PM",
  112. "Jan 02, 2006",
  113. "6/1/2 15:04",
  114. "6-1-2 15:04",
  115. "2 January 2006 15:04:05 MST",
  116. "2 January 2006 15:04:05 -0700",
  117. "2 January 2006",
  118. "2 Jan 2006 15:04:05 Z",
  119. "2 Jan 2006 15:04:05 MST",
  120. "2 Jan 2006 15:04:05 -0700",
  121. "2 Jan 2006",
  122. "2.1.2006 15:04:05",
  123. "2/1/2006",
  124. "2-1-2006",
  125. "2006 January 02",
  126. "2006-1-2T15:04:05Z",
  127. "2006-1-2 15:04:05",
  128. "2006-1-2",
  129. "2006-1-02T15:04:05Z",
  130. "2006-01-02T15:04Z",
  131. "2006-01-02T15:04-07:00",
  132. "2006-01-02T15:04:05Z",
  133. "2006-01-02T15:04:05-07:00:00",
  134. "2006-01-02T15:04:05:-0700",
  135. "2006-01-02T15:04:05-0700",
  136. "2006-01-02T15:04:05-07:00",
  137. "2006-01-02T15:04:05 -0700",
  138. "2006-01-02T15:04:05:00",
  139. "2006-01-02T15:04:05",
  140. "2006-01-02 at 15:04:05",
  141. "2006-01-02 15:04:05Z",
  142. "2006-01-02 15:04:05 MST",
  143. "2006-01-02 15:04:05-0700",
  144. "2006-01-02 15:04:05-07:00",
  145. "2006-01-02 15:04:05 -0700",
  146. "2006-01-02 15:04",
  147. "2006-01-02 00:00:00.0 15:04:05.0 -0700",
  148. "2006/01/02",
  149. "2006-01-02",
  150. "15:04 02.01.2006 -0700",
  151. "1/2/2006 3:04:05 PM MST",
  152. "1/2/2006 3:04:05 PM",
  153. "1/2/2006 15:04:05 MST",
  154. "1/2/2006",
  155. "06/1/2 15:04",
  156. "06-1-2 15:04",
  157. "02 Monday, Jan 2006 15:04",
  158. "02 Jan 2006 15:04 MST",
  159. "02 Jan 2006 15:04:05 UT",
  160. "02 Jan 2006 15:04:05 MST",
  161. "02 Jan 2006 15:04:05 -0700",
  162. "02 Jan 2006 15:04:05",
  163. "02 Jan 2006",
  164. "02/01/2006 15:04 MST",
  165. "02-01-2006 15:04:05 MST",
  166. "02.01.2006 15:04:05",
  167. "02/01/2006 15:04:05",
  168. "02.01.2006 15:04",
  169. "02/01/2006 - 15:04",
  170. "02.01.2006 -0700",
  171. "02/01/2006",
  172. "02-01-2006",
  173. "01/02/2006 3:04 PM",
  174. "01/02/2006 15:04:05 MST",
  175. "01/02/2006 - 15:04",
  176. "01/02/2006",
  177. "01-02-2006",
  178. }
  179. // ParseDate parses a given date string using a large
  180. // list of commonly found feed date formats.
  181. func ParseDate(ds string) (t time.Time, err error) {
  182. d := strings.TrimSpace(ds)
  183. if d == "" {
  184. return t, fmt.Errorf("Date string is empty")
  185. }
  186. for _, f := range dateFormats {
  187. if t, err = time.Parse(f, d); err == nil {
  188. return
  189. }
  190. }
  191. err = fmt.Errorf("Failed to parse date: %s", ds)
  192. return
  193. }