英文:
I am having trouble with comparing datetimes, when there are DB, Go and Unix versions
问题
所以,基本上一个人有一个班次,有一个开始时间和持续时间,我需要知道还有多少分钟。
我从数据库中检索到一个标准的字符串(MySQL)作为班次的开始时间(例如,2022-01-01 09:00:00)。
我还检索到班次的小时数(例如,8小时)。
然后,我可以使用Go的Time.time确定当前时间,但这个格式是不同的。
请参考下面的代码,它更好地解释了问题,并提供了缺失的部分。
var shiftStartDB string // 例如 2022-01-01 09:00:00
var shiftStartUnix int // 例如,将开始时间转换为自纪元以来的分钟数
var offTimer int // 班次的小时数
var shiftEndDB string // 例如 2022-01-01 17:00:00
var shiftEndUnix int // 例如,将结束时间转换为自纪元以来的分钟数
var nowTime Time.time // Go中的当前时间
var nowUnix int // Go中当前时间转换为Unix时间
var templateID string
var minsToGo int
_ = db.QueryRow("SELECT LastSignedOn, OffTimer, TemplateID FROM assets WHERE ID = ?", assetid).Scan(&shiftStartDB, &offTimer, &templateID)
shiftStartUnix = <将数据库时间转换为Unix时间>
if offTimerTemp == 0 {
_ = db.QueryRow("OffTimer FROM templates WHERE ID = ?", templateID).Scan(&offTimer)
}
shiftEndUnix = shiftStartUnix + (offTimer * 60)
nowTime = time.Now()
nowUnix = <将Go时间转换为Unix时间>
minsToGo = shiftEndInt - nowInt
英文:
So, basically a person has a shift, with a start time and duration, and I need to know how many minutes to go.
I retrieve a standard string from the database (MySQL) of datetime for the start of the shift (for example, 2022-01-01 09:00:00).
I also retrieve the number of hours of the shift (for example, 8).
I can then determine current time, using Go's Time.time, but this format is different.
Please see code below, which explains the problem better, and gives the pieces missing.
var shiftStartDB string // For example 2022-01-01 09:00:00
var shiftStartUnix int // For example, start time converted to minutes since epoch
var offTimer int // Number of hours for the shift
var shiftEndDB string // For example 2022-01-01 17:00:00
var shiftEndUnix int // For example, end time converted to minutes since epoch
var nowTime Time.time // Go's version of time for now
var nowUnix int // Go has now converted to Unix time
var templateID string
var minsToGo int
_ = db.QueryRow("SELECT LastSignedOn, OffTimer, TemplateID FROM assets WHERE ID = ?", assetid).Scan(&shiftStartDB, &offTimer, &templateID)
shiftStartUnix = <convert database time into unix time>
if offTimerTemp == 0 {
_ = db.QueryRow("OffTimer FROM templates WHERE ID = ?", templateID).Scan(&offTimer)
}
shiftEndUnix = shiftStartUnix + (offTimer * 60)
nowTime = time.Now()
nowUnix = <convert Go time into Unix time>
minsToGo = shiftEndInt - nowInt
答案1
得分: 1
你可以使用nowUnix = nowTime.UNIX()/60
,因为Time.UNIX
返回自纪元以来经过的秒数。也就是说,如果你解析了时间并直接使用Go库中的时间函数,处理起来可能更容易:
shiftStartTime,err := time.Parse("2006-02-01 15:04:05",dbTime)
shiftEnd=shiftStartTime.Add(time.Hour*offTimer)
minsToGo:=shiftEnd.Sub(time.Now()).Minutes()
英文:
You can use nowUnix = nowTime.UNIX()/60
, as Time.UNIX
returns the number of seconds elapsed since epoch. That said, this might be easier to deal with if you parsed the times and used go library time functions directly:
shiftStartTime,err := time.Parse("2006-02-01 15:04:05",dbTime)
shiftEnd=shiftStartTime.Add(time.Hour*offTimer)
minsToGo:=shiftEnd.Sub(time.Now()).Minutes()
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论