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-11-15SendGrid 的 Go 客户端库怎么实现同时向多个邮箱发送邮件?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么设置header 和 标签tag 呢?-icode9专业技术文章分享
- 2024-11-12Cargo deny安装指路
- 2024-11-02MongoDB项目实战:从入门到初级应用
- 2024-11-01随时随地一键转录,Google Cloud 新模型 Chirp 2 让语音识别更上一层楼
- 2024-10-25Google Cloud动手实验详解:如何在Cloud Run上开发无服务器应用
- 2024-10-24AI ?先驱齐聚 BAAI 2024,发布大规模语言、多模态、具身、生物计算以及 FlagOpen 2.0 等 AI 模型创新成果。
- 2024-10-20goland工具下,如修改一个项目的标准库SDK的版本-icode9专业技术文章分享
- 2024-10-17Go学习:初学者的简单教程
- 2024-10-17Go学习:新手入门完全指南