From 13cfef29fb63a4d76abf11fc1ead9303348b655c Mon Sep 17 00:00:00 2001 From: huanghai <10402852@qq.com> Date: Wed, 30 Sep 2020 15:48:22 +0800 Subject: [PATCH] 'commit' --- dsBaseRpc/Test/DateTest/DateTest.go | 15 +++++++++++ dsBaseRpc/Utils/DateUtil/DateUtil.go | 40 ++++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 dsBaseRpc/Test/DateTest/DateTest.go diff --git a/dsBaseRpc/Test/DateTest/DateTest.go b/dsBaseRpc/Test/DateTest/DateTest.go new file mode 100644 index 00000000..0e22f304 --- /dev/null +++ b/dsBaseRpc/Test/DateTest/DateTest.go @@ -0,0 +1,15 @@ +package main + +import ( + "dsBaseRpc/Utils/DateUtil" + "fmt" +) + +func main(){ + s:=DateUtil.ConvertToFormatDay("66666") + fmt.Println(s) + + s=DateUtil.ConvertToFormatDay("10000") + fmt.Println(s) + +} diff --git a/dsBaseRpc/Utils/DateUtil/DateUtil.go b/dsBaseRpc/Utils/DateUtil/DateUtil.go index 3b21c0ea..23e23896 100644 --- a/dsBaseRpc/Utils/DateUtil/DateUtil.go +++ b/dsBaseRpc/Utils/DateUtil/DateUtil.go @@ -1,6 +1,9 @@ package DateUtil -import "time" +import ( + "strconv" + "time" +) /** 功能:获取当前的时间字符串 @@ -23,6 +26,12 @@ func ConvertDateTime(ts string) time.Time { } func ConvertDate(ts string) time.Time { + //如果是整数并且是5位的 + _, err := strconv.Atoi(ts) + if err == nil { //如果可以转为整数,那么可能是距离1900-01-01的天数 + return ConvertDateTime(ConvertToFormatDay(ts)) + } + //如果是带时分秒的 if len(TimeLayoutStr) == len(ts) { return ConvertDateTime(ts) @@ -35,8 +44,17 @@ func ConvertDate(ts string) time.Time { 功能:判断一个字符串是不是合法的日期格式 作者:黄海 时间: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) @@ -49,3 +67,21 @@ func CheckDateStr(s string) bool { 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 +}