首页 > 解决方案 > 我将如何在 golang 中减少完美的时间?

问题描述

我正在为自动预订费用做一个 cron 工作。管理员在预订完成 2 小时后设置自动收费,然后我在当前时间 2 小时前完成所有预订并自动收费。但最终出现的问题是,current_date= 10/10/2018 current_time= 1:00AMand automatic_charge_hours= 2(hours) 意味着它将获得在 current_time 和 current_date 之前 2 小时完成的所有预订。在 24 小时格式中,它将获取前一个日期的 23 小时(2018 年 9 月 10 日晚上 11:00)的所有预订。但在我的情况下,它会变成零以下是我的情况: -

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

我将如何改变它。请有任何建议。

标签: gotime

解决方案


if hours-int(2) < 0 {
    hours = 0
} else {
    hours = hours - int(2)
}

当小时数为负数时,将小时数显式设置为零。

如果更改hours = 0hours = 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)
}

https://play.golang.org/p/0r6q7Vvai2h


推荐阅读