ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Golang 实现strtotime 字符串转换为时间戳的方法

2022-09-10 00:00:26  阅读:328  来源: 互联网

标签:Golang func fmt strtotime str time 字符串 strings string


       

           在php中,有strtotime 将字符串转换为时间戳,在Golang 中,同样可以实现类型的函数。

   

  1 package main
  2 
  3 import (
  4       "fmt"
  5       "time"
  6       "regexp"
  7       "strings"
  8       "strconv"
  9     )
 10     
 11 func StartTimer(name string) func(){
 12    t := time.Now()
 13    fmt.Println(name, "started")
 14    
 15    return func(){
 16        d := time.Now().Sub(t)
 17        fmt.Println(name, "took", d)
 18        }
 19 }
 20 
 21 
 22 func RunTimer(){
 23    stop := StartTimer("run timer")
 24    
 25    defer stop()
 26    
 27    time.Sleep(1 * time.Second)   
 28 }
 29 
 30 
 31 func strtotime(str string) int64 {
 32     
 33     uintToSeconds := map[string]int64{"minute" : 60, "hour" : 3600, "day" : 86400, "week" : 604800, "year" : ((365 * 86400) + 86400)}
 34 
 35     accumulator := time.Now().Unix()
 36 
 37     var delta int64
 38     plus := true
 39     str = strings.TrimSpace(str)
 40     
 41     if strings.HasPrefix(str, "in ") {
 42         str = strings.Replace(str, "in ", "", 1)
 43     }
 44 
 45     if strings.Index(str, " ago") > 0 {
 46         str = strings.Replace(str, " ago", "", 1)
 47         plus = false
 48     }
 49     
 50     if strings.Index(str, "+") >= 0 {
 51         str = strings.Replace(str, "+", "", 1)
 52     }        
 53     
 54     if strings.Index(str, "-") >= 0 {
 55         str = strings.Replace(str, "-", "", 1)
 56         plus = false
 57     }    
 58 
 59     noteValMap := make(map[string]int64, 10)
 60    
 61    
 62     re := regexp.MustCompile(`\d+\s+(minute|hour|day|week|year)`)
 63     
 64     parts := re.FindAllStringSubmatch(str, -1)
 65    
 66     for i, _ := range parts {
 67         strArray := strings.Split(parts[i][0], " ")
 68         v, _:= strconv.Atoi(strArray[0])
 69         noteValMap[parts[i][1]] = int64(v)
 70     }   
 71     
 72     delta = 0
 73     for k, v := range noteValMap {
 74         
 75         delta += uintToSeconds[k] * v        
 76     }
 77 
 78     if plus {
 79         accumulator += delta
 80     } else {
 81         accumulator -= delta
 82     }        
 83 
 84     return accumulator
 85 }
 86 
 87 
 88 func main(){
 89     fmt.Println("in main")
 90     timeStr := [...]string{"-1 week 3 days  30 minute", " 10 weeks 2 hours ago ", "+ 1 year 11 days 10 minutes"}
 91     
 92     
 93     for _, v := range timeStr {
 94     
 95         ts := strtotime(v)
 96         
 97         timeObj := time.Unix(ts, 10)
 98         
 99         fmt.Println(timeObj.Format("2006-01-02 15:04:05"))    
100     }    
101     
102     RunTimer()
103 }
104 
105 //output:
106 //2022-08-30 23:15:32
107 //2022-07-01 21:45:32
108 //2023-09-21 23:55:32    

 

标签:Golang,func,fmt,strtotime,str,time,字符串,strings,string
来源: https://www.cnblogs.com/wallywl/p/16675782.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有