about summary refs log tree commit diff
path: root/vendor/github.com/ncruces/go-strftime/specifiers.go
diff options
context:
space:
mode:
authorEmile <git@emile.space>2024-08-16 19:50:26 +0200
committerEmile <git@emile.space>2024-08-16 19:50:26 +0200
commit1a57267a17c2fc17fb6e104846fabc3e363c326c (patch)
tree1e574e3a80622086dc3c81ff9cba65ef7049b1a9 /vendor/github.com/ncruces/go-strftime/specifiers.go
initial commit
Diffstat (limited to 'vendor/github.com/ncruces/go-strftime/specifiers.go')
-rw-r--r--vendor/github.com/ncruces/go-strftime/specifiers.go241
1 files changed, 241 insertions, 0 deletions
diff --git a/vendor/github.com/ncruces/go-strftime/specifiers.go b/vendor/github.com/ncruces/go-strftime/specifiers.go
new file mode 100644
index 0000000..065f779
--- /dev/null
+++ b/vendor/github.com/ncruces/go-strftime/specifiers.go
@@ -0,0 +1,241 @@
+package strftime
+
+import "strings"
+
+// https://strftime.org/
+func goLayout(spec, flag byte, parsing bool) string {
+	switch spec {
+	default:
+		return ""
+
+	case 'B':
+		return "January"
+	case 'b', 'h':
+		return "Jan"
+	case 'm':
+		if flag == '-' || parsing {
+			return "1"
+		}
+		return "01"
+	case 'A':
+		return "Monday"
+	case 'a':
+		return "Mon"
+	case 'e':
+		return "_2"
+	case 'd':
+		if flag == '-' || parsing {
+			return "2"
+		}
+		return "02"
+	case 'j':
+		if flag == '-' {
+			if parsing {
+				return "__2"
+			}
+			return ""
+		}
+		return "002"
+	case 'I':
+		if flag == '-' || parsing {
+			return "3"
+		}
+		return "03"
+	case 'H':
+		if flag == '-' && !parsing {
+			return ""
+		}
+		return "15"
+	case 'M':
+		if flag == '-' || parsing {
+			return "4"
+		}
+		return "04"
+	case 'S':
+		if flag == '-' || parsing {
+			return "5"
+		}
+		return "05"
+	case 'y':
+		return "06"
+	case 'Y':
+		return "2006"
+	case 'p':
+		return "PM"
+	case 'P':
+		return "pm"
+	case 'Z':
+		return "MST"
+	case 'z':
+		if flag == ':' {
+			if parsing {
+				return "Z07:00"
+			}
+			return "-07:00"
+		}
+		if parsing {
+			return "Z0700"
+		}
+		return "-0700"
+
+	case '+':
+		if parsing {
+			return "Mon Jan _2 15:4:5 MST 2006"
+		}
+		return "Mon Jan _2 15:04:05 MST 2006"
+	case 'c':
+		if parsing {
+			return "Mon Jan _2 15:4:5 2006"
+		}
+		return "Mon Jan _2 15:04:05 2006"
+	case 'v':
+		return "_2-Jan-2006"
+	case 'F':
+		if parsing {
+			return "2006-1-2"
+		}
+		return "2006-01-02"
+	case 'D', 'x':
+		if parsing {
+			return "1/2/06"
+		}
+		return "01/02/06"
+	case 'r':
+		if parsing {
+			return "3:4:5 PM"
+		}
+		return "03:04:05 PM"
+	case 'T', 'X':
+		if parsing {
+			return "15:4:5"
+		}
+		return "15:04:05"
+	case 'R':
+		if parsing {
+			return "15:4"
+		}
+		return "15:04"
+
+	case '%':
+		return "%"
+	case 't':
+		return "\t"
+	case 'n':
+		return "\n"
+	}
+}
+
+// https://nsdateformatter.com/
+func uts35Pattern(spec, flag byte) string {
+	switch spec {
+	default:
+		return ""
+
+	case 'B':
+		return "MMMM"
+	case 'b', 'h':
+		return "MMM"
+	case 'm':
+		if flag == '-' {
+			return "M"
+		}
+		return "MM"
+	case 'A':
+		return "EEEE"
+	case 'a':
+		return "E"
+	case 'd':
+		if flag == '-' {
+			return "d"
+		}
+		return "dd"
+	case 'j':
+		if flag == '-' {
+			return "D"
+		}
+		return "DDD"
+	case 'I':
+		if flag == '-' {
+			return "h"
+		}
+		return "hh"
+	case 'H':
+		if flag == '-' {
+			return "H"
+		}
+		return "HH"
+	case 'M':
+		if flag == '-' {
+			return "m"
+		}
+		return "mm"
+	case 'S':
+		if flag == '-' {
+			return "s"
+		}
+		return "ss"
+	case 'y':
+		return "yy"
+	case 'Y':
+		return "yyyy"
+	case 'g':
+		return "YY"
+	case 'G':
+		return "YYYY"
+	case 'V':
+		if flag == '-' {
+			return "w"
+		}
+		return "ww"
+	case 'p':
+		return "a"
+	case 'Z':
+		return "zzz"
+	case 'z':
+		if flag == ':' {
+			return "xxx"
+		}
+		return "xx"
+	case 'L':
+		return "SSS"
+	case 'f':
+		return "SSSSSS"
+	case 'N':
+		return "SSSSSSSSS"
+
+	case '+':
+		return "E MMM d HH:mm:ss zzz yyyy"
+	case 'c':
+		return "E MMM d HH:mm:ss yyyy"
+	case 'v':
+		return "d-MMM-yyyy"
+	case 'F':
+		return "yyyy-MM-dd"
+	case 'D', 'x':
+		return "MM/dd/yy"
+	case 'r':
+		return "hh:mm:ss a"
+	case 'T', 'X':
+		return "HH:mm:ss"
+	case 'R':
+		return "HH:mm"
+
+	case '%':
+		return "%"
+	case 't':
+		return "\t"
+	case 'n':
+		return "\n"
+	}
+}
+
+// http://man.he.net/man3/strftime
+func okModifier(mod, spec byte) bool {
+	if mod == 'E' {
+		return strings.Contains("cCxXyY", string(spec))
+	}
+	if mod == 'O' {
+		return strings.Contains("deHImMSuUVwWy", string(spec))
+	}
+	return false
+}