From 49fa03bf4286bd2cbf90b271fb65d4f70e5de57f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=CA=BFAhed=20=CA=BFid?= <Ahed91@users.noreply.github.com>
Date: Sat, 4 Feb 2017 14:37:50 +0200
Subject: [PATCH] Allow using custom time format (#798)

* Allow using custom time format

I need to use custom time format in `conf/app.ini' like

    FORMAT = 2006-01-02 15:04:05

so that Gitea will display '2017-01-30 08:41:49'
check this answer for more constants to format date  <http://stackoverflow.com/a/20234207/2570425>

PS: First GO commit

* Refactor and validate TimeFormat (must have 2006, 01, 02, 15, 04 and 05)
---
 modules/setting/setting.go | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/modules/setting/setting.go b/modules/setting/setting.go
index ae7b8beb3a..51f5c2a454 100644
--- a/modules/setting/setting.go
+++ b/modules/setting/setting.go
@@ -732,6 +732,7 @@ please consider changing to GITEA_CUSTOM`)
 	AttachmentMaxFiles = sec.Key("MAX_FILES").MustInt(5)
 	AttachmentEnabled = sec.Key("ENABLE").MustBool(true)
 
+	TimeFormatKey := Cfg.Section("time").Key("FORMAT").MustString("RFC1123")
 	TimeFormat = map[string]string{
 		"ANSIC":       time.ANSIC,
 		"UnixDate":    time.UnixDate,
@@ -748,7 +749,16 @@ please consider changing to GITEA_CUSTOM`)
 		"StampMilli":  time.StampMilli,
 		"StampMicro":  time.StampMicro,
 		"StampNano":   time.StampNano,
-	}[Cfg.Section("time").Key("FORMAT").MustString("RFC1123")]
+	}[TimeFormatKey]
+	// When the TimeFormatKey does not exist in the previous map e.g.'2006-01-02 15:04:05'
+	if len(TimeFormat) == 0 {
+		TimeFormat = TimeFormatKey
+		TestTimeFormat, _ := time.Parse(TimeFormat, TimeFormat)
+		if TestTimeFormat.Format(time.RFC3339) != "2006-01-02T15:04:05Z" {
+			log.Fatal(4, "Can't create time properly, please check your time format has 2006, 01, 02, 15, 04 and 05")
+		}
+		log.Trace("Custom TimeFormat: %s", TimeFormat)
+	}
 
 	RunUser = Cfg.Section("").Key("RUN_USER").MustString(user.CurrentUsername())
 	// Does not check run user when the install lock is off.