mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-04 08:02:26 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			241 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			241 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
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
 | 
						|
}
 |