Как я сделаю идеальное сокращение времени в Голанге? - PullRequest
0 голосов
/ 11 октября 2018

Я делаю работу cron для автоматической оплаты бронирования.Администратор установил автоматическую оплату через 2 часа после завершения бронирования, затем я получаю все заказы, завершенные до 2 часов с текущего времени, и взимаю их автоматически.Но проблема возникает в конце дня в том, что current_date= 10/10/2018 current_time= 1:00AM и automatic_charge_hours= 2 (часы) означает, что он получит все заказы, которые завершены за 2 часа до current_time и current_date.В 24-часовом формате он получит все заказы за 23 часа (23:00 дня 09.10.2017) предыдущей даты.Но в моем состоянии оно превратит его в ноль, ниже мое условие: -

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 голосов
/ 11 октября 2018

Вам нужно только немного изменить условие для часов, как показано ниже: -

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/

0 голосов
/ 11 октября 2018
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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...