如何减少golang的完美时间?

时间:2018-10-11 04:32:06

标签: go time

我正在自动执行预订费用的预约工作。管理员设置了2小时的预订完成后自动收费,然后我从当前时间开始2小时之前完成了所有预订并自动收费。但是,最终出现的问题是current_date= 10/10/2018 current_time= 1:00AMautomatic_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

我将如何更改它。有任何建议。

2 个答案:

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

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

答案 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/

中看到