#做个记录,由于工作中经常用到时间戳转换小工具,之前都是在网上用在线转换,觉得不如自己弄个可执行程序方便。正好最近在研究golang,决定用ui写一个小工具,方便时间戳转换
golang自带的ui只能解决一些简单的布局,复杂的就不太适合了,比如修改控件的长度、设置边距等,主要是没研究太明白。
因为自己用,只要能实现功能就好。代码例子:
package main
import (
"github.com/andlabs/ui"
_ "github.com/andlabs/ui/winmanifest"
"strconv"
"time"
)
func main() {
err := ui.Main(func() {
//timestampName := ui.NewLabel("当前时间戳:")
timestampValue := ui.NewEntry()
timestampValue.LibuiControl()
//dataTimeNow := ui.NewLabel("当前时间:")
dataTimeNowValue := ui.NewEntry()
horizontalBox1 := ui.NewHorizontalBox()
horizontalBox1.SetPadded(true)
horizontalBox2 := ui.NewHorizontalBox()
timestampName2 := ui.NewLabel("时间戳:")
timestampValue2 := ui.NewEntry()
timestampValue2.SetText(strconv.FormatInt(time.Now().Unix(), 10))
combobox := ui.NewCombobox()
combobox.Append("秒(s)")
combobox.Append("毫秒(s)")
combobox.SetSelected(0)
button1 := ui.NewButton("转换>>")
result := ui.NewEntry()
horizontalBox2.Append(timestampName2, false)
horizontalBox2.Append(timestampValue2, true)
horizontalBox2.Append(combobox, true)
horizontalBox2.Append(button1, true)
horizontalBox2.Append(result, true)
// 单起线程读时间
go func() {
ticker := time.NewTicker(time.Second * 1)
for range ticker.C {
selected := combobox.Selected()
var unix int64
now := time.Now()
if selected == 0 {
unix = now.Unix()
} else {
unix = now.UnixNano() / 1e6
}
timestampValue.SetText(strconv.FormatInt(unix, 10))
dataTimeNowValue.SetText(now.Format("2006-01-02 15:04:05"))
}
}()
horizontalBox3 := ui.NewHorizontalBox()
timestampName3 := ui.NewLabel("北京时间(YYYY-MM-DD hh:mm:ss):")
timestampValue3 := ui.NewEntry()
timestampValue3.SetText(time.Now().Format("2006-01-02 15:04:05"))
button3 := ui.NewButton("转换>>")
result3 := ui.NewEntry()
combobox3 := ui.NewCombobox()
combobox3.Append("秒(s)")
combobox3.Append("毫秒(s)")
combobox3.SetSelected(0)
horizontalBox3.Append(timestampName3, false)
horizontalBox3.Append(timestampValue3, true)
horizontalBox3.Append(button3, true)
horizontalBox3.Append(result3, true)
horizontalBox3.Append(combobox3, true)
// 时间转换成时间戳
button3.OnClicked(func(button *ui.Button) {
timeStr := timestampValue3.Text()
local, _ := time.LoadLocation("Asia/Shanghai")
showTime, _ := time.ParseInLocation("2006-01-02 15:04:05", timeStr, local)
selected := combobox3.Selected()
var unix int64
if selected == 0{
unix = showTime.Unix()
}else{
unix = showTime.UnixNano() / 1e6
}
result3.SetText(strconv.FormatInt(unix, 10))
})
group1 := ui.NewGroup("当前时间戳")
group1.SetChild(timestampValue)
group11 := ui.NewGroup("当前时间")
group11.SetChild(dataTimeNowValue)
horizontalBox1.Append(group1,false)
horizontalBox1.Append(group11,false)
group2 := ui.NewGroup("")
group2.SetChild(horizontalBox2)
group3 := ui.NewGroup("")
group3.SetChild(horizontalBox3)
box := ui.NewVerticalBox()
box.Append(horizontalBox1, false)
box.Append(group2, false)
box.Append(group3, false)
window := ui.NewWindow("时间戳转换工具", 500, 120, true)
window.SetMargined(true)
window.SetChild(box)
// 时间戳转换成日期
button1.OnClicked(func(button *ui.Button) {
atoi, _ := strconv.Atoi(timestampValue2.Text())
selected := combobox.Selected()
var timeobj time.Time
if selected == 0 {
timeobj = time.Unix(int64(atoi), 0)
} else {
timeobj = time.UnixMilli(int64(atoi))
}
date := timeobj.Format("2006-01-02 15:04:05")
result.SetText(date)
})
// 关闭窗口
window.OnClosing(func(window *ui.Window) bool {
ui.Quit()
return true
})
window.Show()
})
if err != nil {
var errMsg any =err
panic(errMsg)
}
}
自学golang,希望哪位大神能分享点资料,跪求!!!