package DateUtil import ( "strconv" "time" ) /** 功能:获取当前的时间字符串 作者:黄海 时间:2020-01-20 */ func GetCurrentTimeStr() string { return time.Now().Format("20060102150405") } const TimeLayoutStr = "2006-01-02 15:04:05" //go中的时间格式化必须是这个时间 /** 功能:将一个字符串转为对应的时间 作者:黄海 时间:2020-05-29 */ func ConvertDateTime(ts string) time.Time { st, _ := time.Parse(TimeLayoutStr, ts) //string转time return st } func ConvertDate(ts string) time.Time { //如果是整数并且是5位的 _, err := strconv.Atoi(ts) if err == nil { //如果可以转为整数,那么可能是距离1900-01-01的天数 return ConvertDateTime(ConvertToFormatDay(ts)+ " 00:00:00") } //如果是带时分秒的 if len(TimeLayoutStr) == len(ts) { return ConvertDateTime(ts) } else { // 不带时分秒的补全 return ConvertDateTime(ts + " 00:00:00") } } /** 功能:判断一个字符串是不是合法的日期格式 作者:黄海 时间:2020-08-18 */ func CheckDateStr(s string) bool { //转一下整数 dateInt, err := strconv.Atoi(s) if err == nil { //如果可以转为整数,那么可能是距离1900-01-01的天数 //能转成整数,那么是不是在10000--->66666,代表1927-05-18--->2082-07-09 if dateInt < 10000 || dateInt > 66666 { return false } return true } //这种情况下,time.Parse会转成时间2014-03-01 00:00:00,有一个办法是,转换后如果没有报错,你再Format, //跟原来的的对比一下,如果不同,那就可以是说是错误的。 t, err := time.Parse("2006-01-02", s) if err != nil { return false } if s == t.Format("2006-01-02") { return true } else { return false } } // excel日期字段格式化 yyyy-mm-dd func ConvertToFormatDay(excelDaysString string) string { // 2006-01-02 距离 1900-01-01的天数 baseDiffDay := 38719 //在网上工具计算的天数需要加2天,什么原因没弄清楚 curDiffDay := excelDaysString b, _ := strconv.Atoi(curDiffDay) // 获取excel的日期距离2006-01-02的天数 realDiffDay := b - baseDiffDay //fmt.Println("realDiffDay:",realDiffDay) // 距离2006-01-02 秒数 realDiffSecond := realDiffDay * 24 * 3600 //fmt.Println("realDiffSecond:",realDiffSecond) // 2006-01-02 15:04:05距离1970-01-01 08:00:00的秒数 网上工具可查出 baseOriginSecond := 1136185445 resultTime := time.Unix(int64(baseOriginSecond+realDiffSecond), 0).Format("2006-01-02") return resultTime }