基本上,如果我运行此代码,我可以获得日期
t := time.Now()
fmt.Println(t.Format("02/01/2006"))
我的问题是如何以这种格式将Go年转换为佛教年?
注意将A.D.中的年份转换为B.E格式的公式为
B.E. = A.D. + 543
答案 0 :(得分:3)
我非常怀疑存在一个格式字符串,它会产生佛教时间,所以只需做简单直接的事情,并在你的日期添加543年......你应该使用beDifference
的常量。 / p>
t := time.Now()
buddhaTime = t.AddDate(543, 0, 0)
答案 1 :(得分:3)
我认为下面的这种方式在闰年有一个错误。
t := time.Now()
buddhaTime = t.AddDate(543, 0, 0)
如果年份是闰年,比如2020,那么佛年就是2020+543,也就是2563。但是Golang时间会明白2563是在基督年,但实际上,在基督年的2563并不是闰年年。因此,每个闰年的 2 月 29 日和 3 月 1 日都会发生冲突。例如,如果您尝试转换 29/02/2020,您将在佛教时代得到 01/03/2563。
所以我认为解决办法是先检测闰年,然后处理格式。
func IsLeapYear(date time.Time) bool {
endOfYear := time.Date(date.Year(), time.December, 31, 0, 0, 0, 0, time.Local)
day := endOfYear.YearDay()
return day == 366
}
func ConvertDateToBuddhistEra(date time.Time) string {
if IsLeapYear(date) {
y := date.Year()+543
return fmt.Sprintf("%s/%s/%d", date.Format("02"), date.Format("01"), y)
}
return date.AddDate(543, 0, 0).Format("02/01/2006")
}
库的更新格式会很好。