Golang 实现strtotime 字符串转换为时间戳的方法
2022/9/10 6:55:33
本文主要是介绍Golang 实现strtotime 字符串转换为时间戳的方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在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 实现strtotime 字符串转换为时间戳的方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享
- 2024-12-10搭建个人博客网站之一、使用hugo创建个人博客网站