1. 程式人生 > 其它 >Go語言時間與字串以及時間戳的相互轉換

Go語言時間與字串以及時間戳的相互轉換

1、時間與字串以及時間戳的相互轉換

  • Time型別---------->string型別

  • string型別---------->Time型別

  • Time型別---------->時間戳int64型別(秒)

  • 時間戳int64型別(秒)---------->Time型別

package main

import (
   "fmt"
   "time"
)

func main() {

   //獲取當前時間Time型別
   now := time.Now()
   fmt.Println(fmt.Sprintf("當前時間(Time型別):%s", now)) //返回當前時間Time型別

   //Time型別---------->string型別
   strTime := now.Format("2006-01-02 15:04:05")
   fmt.Println(fmt.Sprintf("當前時間(string型別)(Time型別---------->string型別):%s", strTime)) //格式化時間為字串

   //string型別---------->Time型別
   loc, _ := time.LoadLocation("Local") //獲取當地時區
   location, err := time.ParseInLocation("2006-01-02 15:04:05", "2021-11-30 19:21:35", loc)
   if err != nil {
      return
   }
   fmt.Printf("string型別(2021-11-30 19:21:35)---------->Time型別:%+v\n", location)

   //Time型別---------->時間戳(秒)
   unix := now.Unix()
   fmt.Printf("當前時間戳(int64型別)(Time型別---------->時間戳(秒)int64型別):%d\n", unix) //獲取時間戳,基於1970年1月1日,單位秒

   //時間戳(秒)---------->Time型別
   unixStr := time.Unix(1638271295, 0)
   fmt.Printf("時間戳(秒)2021-11-30 19:21:35|1638271295---------->Time型別:%s", unixStr)
}

2、今天是幾月幾號周幾

package main

import (
   "fmt"
   "time"
)

func main() {

   //獲取當前時間Time型別
   now := time.Now()
   fmt.Println(fmt.Sprintf("當前時間(Time型別):%s", now)) //返回當前時間Time型別

   day := now.Day()
   fmt.Printf("今天是幾號-->%d\n", day)

   fmt.Printf("本月是幾月-->%s\n", now.Month())

   fmt.Printf("今天是周幾-->%s\n", now.Weekday())
}

3、時間的加法(獲取下週幾是幾月幾號)

思路舉例:

  • 假設今天是週二,求下週三是幾月幾號?

    • 求下週三是幾月幾號,則下週一到下週三就是3天(記錄為number)

    • 今天是週二,則週二到這週末還剩餘7-2=5天(記錄為7 - weekday)

    • 所以距離下週三就還剩餘7 - weekday + number天

    • 所以用今天加上天數即可知道下週三是幾月幾號

package main

import (
   "fmt"
   "time"
)

func main() {
   GetNextWeekNumber(time.Monday)    //求下週一是幾月幾號
   GetNextWeekNumber(time.Tuesday)   //求下週二是幾月幾號
   GetNextWeekNumber(time.Wednesday) //求下週三是幾月幾號
   GetNextWeekNumber(time.Thursday)  //求下週四是幾月幾號
   GetNextWeekNumber(time.Friday)    //求下週五是幾月幾號
   GetNextWeekNumber(time.Saturday)  //求下週六是幾月幾號
   GetNextWeekNumber(time.Sunday)    //求下週天是幾月幾號

   GetNextWeekNumber(8)  //求下週一是幾月幾號 (根據對7取餘數來計算)
   GetNextWeekNumber(9)  //求下週二是幾月幾號 (根據對7取餘數來計算)
   GetNextWeekNumber(10) //求下週三是幾月幾號(根據對7取餘數來計算)

   //GetNextWeekNumber(-1) //求這週六是幾月幾號
   //GetNextWeekNumber(-2) //求這週五是幾月幾號
   //GetNextWeekNumber(-3) //求這週四是幾月幾號
}

func GetNextWeekNumber(next time.Weekday) {
   number := next % 7 //保證是求下週一到下週天的某一個
   now := time.Now()
   weekday := now.Weekday()
   if weekday == time.Sunday {
      weekday = 7 //週一為第一天,週二為第二天,以此類推,周天表示為第7天
   }
   if number == time.Sunday {
      number = 7
   }
   expiryDays := 7 - weekday + number
   nextWeek := now.AddDate(0, 0, int(expiryDays))
   fmt.Printf("下一個%s 是 %s\n", next.String(), nextWeek)
}