This repository has been archived by the owner on Nov 13, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 778
/
date_utils.R
55 lines (52 loc) · 1.97 KB
/
date_utils.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
format_timestamp <- function(indf, index = 1) {
if (class(indf[[index]])[1] == "POSIXlt") {
return(indf)
}
if (stringr::str_detect(indf[[index]][1], "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2} \\+\\d{4}$")) {
indf[[index]] <- strptime(indf[[index]], format="%Y-%m-%d %H:%M:%S", tz="UTC")
}
else if (stringr::str_detect(indf[[index]][1], "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$")) {
indf[[index]] <- strptime(indf[[index]], format="%Y-%m-%d %H:%M:%S", tz="UTC")
}
else if (stringr::str_detect(indf[[index]][1], "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}$")) {
indf[[index]] <- strptime(indf[[index]], format="%Y-%m-%d %H:%M", tz="UTC")
}
else if (stringr::str_detect(indf[[index]][1], "^\\d{2}/\\d{2}/\\d{2}$")) {
indf[[index]] <- strptime(indf[[index]], format="%m/%d/%y", tz="UTC")
}
else if (stringr::str_detect(indf[[index]][1], "^\\d{2}/\\d{2}/\\d{4}$")) {
indf[[index]] <- strptime(indf[[index]], format="%m/%d/%Y", tz="UTC")
}
else if (stringr::str_detect(indf[[index]][1], "^\\d{4}\\d{2}\\d{2}$")) {
indf[[index]] <- strptime(indf[[index]], format="%Y%m%d", tz="UTC")
}
else if (stringr::str_detect(indf[[index]][1], "^\\d{4}/\\d{2}/\\d{2}/\\d{2}$")) {
indf[[index]] <- strptime(indf[[index]], format="%Y/%m/%d/%H", tz="UTC")
}
else if (stringr::str_detect(indf[[index]][1], "^\\d{10}$")) {
# Handle Unix seconds in milliseconds
indf[[index]] <- as.POSIXlt(indf[[index]], origin="1970-01-01", tz="UTC")
}
return(indf)
}
get_gran = function(tsdf, index=1) {
n = length(tsdf[[index]])
# We calculate the granularity from the time difference between the last 2 entries (sorted)
gran = round(difftime(max(tsdf[[index]]), sort(tsdf[[index]], partial = n-1)[n-1],
units = "secs"))
if (gran >= 86400) {
return("day")
}
else if (gran >= 3600) {
return("hr")
}
else if (gran >= 60) {
return("min")
}
else if (gran >= 1) {
return("sec")
}
else {
return("ms")
}
}