如何将Golang年变换为佛教年

时间:2016-04-20 23:11:25

标签: date go formatting

基本上,如果我运行此代码,我可以获得日期

t := time.Now()
fmt.Println(t.Format("02/01/2006"))

我的问题是如何以这种格式将Go年转换为佛教年?

注意将A.D.中的年份转换为B.E格式的公式为

B.E. = A.D. + 543

2 个答案:

答案 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")
}

库的更新格式会很好。