我正在自动执行预订费用的预约工作。管理员设置了2小时的预订完成后自动收费,然后我从当前时间开始2小时之前完成了所有预订并自动收费。但是,最终出现的问题是current_date= 10/10/2018 current_time= 1:00AM
和automatic_charge_hours= 2
(小时)意味着它将获得所有在current_time和current_date之前2小时完成的预订。以24小时格式,它将获得上一个日期23小时(日期为09/10/2018的11:00 PM)的所有预订。但是在我的情况下,它将变成零,这是我的情况:-
package main
import (
"fmt"
"time"
"strings"
)
func main() {
timeZone, _ := time.LoadLocation("America/New_York")
currDate := time.Now().In(timeZone).Format("2006-01-02 00:00:00 -0000")
onlyDate := strings.Split(currDate, " ")
hours, _ := 1, 0
if hours-int(2) < 0 {
hours = 0
} else {
hours = hours - int(2)
}
fmt.Println(hours, onlyDate[0])
}
游乐场链接https://play.golang.org/p/w7LIoTp9xN0
我将如何更改它。有任何建议。
答案 0 :(得分:1)
if hours-int(2) < 0 {
hours = 0
} else {
hours = hours - int(2)
}
当小时为负数时,将小时数明确设置为零。
如果将hours = 0
更改为hours = 24 + (hours-int(2))
,它将返回23。
请参见https://play.golang.org/p/FyXIn5gjIXk
无论如何,您应该使用时间函数来代替手动操作小时。
更新:使用时间功能:
package main
import (
"fmt"
"time"
)
func main() {
t, err := time.Parse("01.02.2006 03:04:00", "10.10.2018 01:00:00")
if err != nil {
panic(err)
}
then := t.Add(time.Duration( -2 ) * time.Hour)
fmt.Printf("%v\n", then)
}
答案 1 :(得分:0)
您只需要在以下几个小时内稍微改变一下条件即可:-
func main() {
timeZone, _ := time.LoadLocation("America/New_York")
currDate := time.Now().In(timeZone).Format("2006-01-02 00:00:00 -0000")
onlyDate := strings.Split(currDate, " ")
hours, _ := 1, 0
hours = hours-int(2)
fmt.Println(hours)
if hours <= -1 {
hours = 24 + hours
currDate = time.Now().In(timeZone).AddDate(0, 0, -1).Format("2006-01-02 00:00:00 -0000")
fmt.Println(currDate)
}
fmt.Println(hours, onlyDate[0])
}
AddDate()
是时间包中的函数,您可以在https://golang.org/pkg/time/