在Go语言中,time.Time 的类型中,集合许多非常有用的函数,如time.Date(),time.Since(),time.Sub()等。这都大大方便了对于时间的统计。
案例:编写一个函数,判断输入的某一天是打鱼还是晒网.
思路:1、利用time.Date等函数,计算输入的那一天到指定日期的天数
2、三天打鱼二天晒网,总计是五天,如果按第1、2、3天是打鱼的,那么第4、5天为晒
网。用总计天数%5的余数,进行判断这一天是打鱼还是晒网。
package main
import (
"fmt"
"time"
_ "strconv"
)
func getDays(y, m, d int) int {
inputTime := time.Date(y, time.Month(m), d, 0, 0, 0, 0, time.Local)
initTime := time.Date(1990, 1, 1, 0, 0, 0, 0, time.Local)
//统计输入的日期与当前的日期之间的天数
//daysSum := int(time.Since(inputTime).Hours()/24)
//将天数转成小时,再除以24得出的结果就是天数,
totalDays := int(inputTime.Sub(initTime).Hours()/24)
return totalDays + 1 //需要加上1天
}
func inputDate() (y,m,d int) {
var year, month, day int
var count, i, j int
a:
for {
fmt.Print("请输入年份:")
fmt.Scanln(&year)
if year >= 1990 {
break a
} else {
count ++
fmt.Printf("年份输入有误,您还有%v次机会 ...\n",5 - count)
}
if count == 5 {
fmt.Println("您输入错误已满5次,3秒后将关闭程序...")
time.Sleep(3 * time.Second)
break a
}
}
b:
for {
fmt.Print("请输入月份:")
fmt.Scanln(&month)
if month <= 12 && month >= 1 {
break b
} else {
i ++
fmt.Printf("月份输入有误,您还有%v次机会 ...\n",5 - i)
}
if i == 5 {
fmt.Println("您输入错误已满5次,3秒后将关闭程序...")
time.Sleep(3 * time.Second)
break b
}
}
c:
for {
fmt.Print("请输入日期:")
fmt.Scanln(&day)
if day <= 31 && day >= 1 {
break c
}else {
j ++
fmt.Printf("日期输入有误,您还有%v次机会 ...\n",5 - j)
}
if j == 5 {
fmt.Println("您输入错误已满5次,3秒后将关闭程序...")
time.Sleep(3 * time.Second)
break c
}
}
return year, month, day
}
func main() {
daysSum := getDays(inputDate())
fmt.Printf("您输入的日期与1990年1月1日相隔%v天... \n",daysSum)
daysRes := daysSum % 5
switch daysRes {
case 1,2,3 :
fmt.Println("今天打鱼")
case 4,5:
fmt.Println("今天晒网")
default:
fmt.Println("今天休息")
}
}
输出的结果: