Skip to main content

polars_time/chunkedarray/string/
patterns.rs

1//! Patterns are grouped together by order of month, day, year. This is to prevent
2//! parsing different orders of dates in a single column.
3
4pub(super) static DATE_D_M_Y: &[&str] = &["%d-%m-%Y", "%d/%m/%Y", "%d.%m.%Y"];
5
6pub(super) static DATE_Y_M_D: &[&str] = &[
7    "%Y-%m-%d", // 2021-12-31
8    "%Y/%m/%d", // 2021/12/31
9    "%Y.%m.%d", // 2021.12.31
10];
11
12/// NOTE: don't use single letter dates like %F
13/// polars parsers does not support them, so it will be slower
14pub(super) static DATETIME_D_M_Y: &[&str] = &[
15    "%d-%m-%YT%H:%M:%S%.f",
16    "%d-%m-%YT%H%M%S%.f",
17    "%d-%m-%YT%H:%M",
18    "%d-%m-%YT%H%M",
19    "%d-%m-%Y %H:%M:%S%.f",
20    "%d-%m-%Y %H%M%S%.f",
21    "%d-%m-%Y %H:%M",
22    "%d-%m-%Y %H%M",
23    "%d-%m-%Y",
24    "%d/%m/%YT%H:%M:%S%.f",
25    "%d/%m/%YT%H%M%S%.f",
26    "%d/%m/%YT%H:%M",
27    "%d/%m/%YT%H%M",
28    "%d/%m/%Y %H:%M:%S%.f",
29    "%d/%m/%Y %H%M%S%.f",
30    "%d/%m/%Y %H:%M",
31    "%d/%m/%Y %H%M",
32    "%d/%m/%Y",
33    "%d.%m.%YT%H:%M:%S%.f",
34    "%d.%m.%YT%H%M%S%.f",
35    "%d.%m.%YT%H:%M",
36    "%d.%m.%YT%H%M",
37    "%d.%m.%Y %H:%M:%S%.f",
38    "%d.%m.%Y %H%M%S%.f",
39    "%d.%m.%Y %H:%M",
40    "%d.%m.%Y %H%M",
41    "%d.%m.%Y",
42];
43
44/// NOTE: don't use single letter dates like %F
45/// polars parsers does not support them, so it will be slower
46pub(super) static DATETIME_Y_M_D: &[&str] = &[
47    "%Y-%m-%dT%H:%M:%S%.f",
48    "%Y-%m-%dT%H%M%S%.f",
49    "%Y-%m-%dT%H:%M",
50    "%Y-%m-%dT%H%M",
51    "%Y-%m-%d %H:%M:%S%.f",
52    "%Y-%m-%d %H%M%S%.f",
53    "%Y-%m-%d %H:%M",
54    "%Y-%m-%d %H%M",
55    "%Y-%m-%d",
56    "%Y/%m/%dT%H:%M:%S%.f",
57    "%Y/%m/%dT%H%M%S%.f",
58    "%Y/%m/%dT%H:%M",
59    "%Y/%m/%dT%H%M",
60    "%Y/%m/%d %H:%M:%S%.f",
61    "%Y/%m/%d %H%M%S%.f",
62    "%Y/%m/%d %H:%M",
63    "%Y/%m/%d %H%M",
64    "%Y/%m/%d",
65    "%Y.%m.%dT%H:%M:%S%.f",
66    "%Y.%m.%dT%H%M%S%.f",
67    "%Y.%m.%dT%H:%M",
68    "%Y.%m.%dT%H%M",
69    "%Y.%m.%d %H:%M:%S%.f",
70    "%Y.%m.%d %H%M%S%.f",
71    "%Y.%m.%d %H:%M",
72    "%Y.%m.%d %H%M",
73    "%Y.%m.%d",
74    "%Y%m%dT%H%M%S%.f",     // Compact ISO 8601.
75    "%Y-%m-%dT%H:%M:%S%.f", // ISO 8601 with dynamic precision and without timezone
76];
77
78pub(super) static DATETIME_Y_M_D_Z: &[&str] = &[
79    "%Y-%m-%dT%H:%M:%S%.f%#z",
80    "%Y-%m-%dT%H%M%S%.f%#z",
81    "%Y-%m-%dT%H:%M%#z",
82    "%Y-%m-%dT%H%M%#z",
83    "%Y-%m-%d %H:%M:%S%.f%#z",
84    "%Y-%m-%d %H%M%S%.f%#z",
85    "%Y-%m-%d %H:%M%#z",
86    "%Y-%m-%d %H%M%#z",
87    "%Y/%m/%dT%H:%M:%S%.f%#z",
88    "%Y/%m/%dT%H%M%S%.f%#z",
89    "%Y/%m/%dT%H:%M%#z",
90    "%Y/%m/%dT%H%M%#z",
91    "%Y/%m/%d %H:%M:%S%.f%#z",
92    "%Y/%m/%d %H%M%S%.f%#z",
93    "%Y/%m/%d %H:%M%#z",
94    "%Y/%m/%d %H%M%#z",
95    "%Y.%m.%dT%H:%M:%S%.f%#z",
96    "%Y.%m.%dT%H%M%S%.f%#z",
97    "%Y.%m.%dT%H:%M%#z",
98    "%Y.%m.%dT%H%M%#z",
99    "%Y.%m.%d %H:%M:%S%.f%#z",
100    "%Y.%m.%d %H%M%S%.f%#z",
101    "%Y.%m.%d %H:%M%#z",
102    "%Y.%m.%d %H%M%#z",
103    "%Y%m%dT%H%M%S%.f%#z", // Compact ISO 8601.
104    "%Y%m%dT%H%M%S%.fZ",   // Compact ISO 8601.
105    "%+",                  // ISO 8601; Same as %Y-%m-%dT%H:%M:%S%.f%:z; supports Z or UTC
106];
107
108pub(super) static TIME_H_M_S: &[&str] = &["%T%.f", "%R"];
109
110#[derive(Eq, Hash, PartialEq, Clone, Copy, Debug)]
111pub enum Pattern {
112    DateDMY,
113    DateYMD,
114    DatetimeYMD,
115    DatetimeDMY,
116    DatetimeYMDZ,
117    Time,
118}