go学习笔记-做一个时间戳转换小工具

298 阅读2分钟

#做个记录,由于工作中经常用到时间戳转换小工具,之前都是在网上用在线转换,觉得不如自己弄个可执行程序方便。正好最近在研究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,希望哪位大神能分享点资料,跪求!!!