首页 > 其他分享 >GO 操作时间

GO 操作时间

时间:2023-01-29 16:35:10浏览次数:32  
标签:10 ti return TimeRange 时间 func time GO 操作

package timer

import (
"fmt"
"time"
)

var (
BackOffset = -1 * time.Millisecond
)

type TimeRange struct {
Start time.Time
End time.Time
}

func (s TimeRange) String() string {
out := fmt.Sprintf("[%s, %s]", s.Start, s.End)
return out
}

func (s *TimeRange) ToUnix() *TimeRangeUnix {
out := &TimeRangeUnix{}
out.Start = s.Start.Unix()
out.End = s.End.Unix()
return out
}

type TimeRangeUnix struct {
Start int64
End int64
}

// GetDayRange 1945-10-10 12:12:12 --> [1945-10-10 00:00:00, 1945-10-10 23:59:59]
func GetDayRange(t time.Time) *TimeRange {
tiStart := GetDayStart(t)
tiEnd := tiStart.AddDate(0, 0, 1).Add(BackOffset)
tr := &TimeRange{
tiStart, tiEnd,
}
return tr
}

// GetDayStart 1945-10-10 12:12:12 --> 1945-10-10 00:00:00
func GetDayStart(t time.Time) time.Time {
tiStart := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location())
return tiStart
}

// GetWeekRange 1945-10-10 12:12:12 --> [1945-10-08 00:00:00, 1945-10-14 23:59:59]
func GetWeekRange(in time.Time) *TimeRange {
weekDay := int(in.Weekday())
dayFix := 1 // monday is the first day of week
weekDay -= dayFix
dayStart := GetDayStart(in)
tiStart := dayStart.AddDate(0, 0, -1*weekDay)
tiEnd := tiStart.AddDate(0, 0, 7).Add(BackOffset)
tr := &TimeRange{
tiStart, tiEnd,
}
return tr
}

// GetMonthRange 获取上个月时间
func GetMonthRange(ti time.Time) *TimeRange {
today := GetDayStart(ti)
dayOffset := ti.Day()*-1 + 1
start := today.AddDate(0, -1, dayOffset)
end := start.AddDate(0, 1, 0).Add(BackOffset)
tr := TimeRange{
start, end,
}
return &tr
}

// GetMonthRangeByCondit 获取前几个月时间
func GetMonthRangeByCondit(ti time.Time, n int) *TimeRange {
today := GetDayStart(ti)
dayOffset := ti.Day()*-1 + 1
start := today.AddDate(0, -n, dayOffset)
end := start.AddDate(0, n, 0).Add(BackOffset)
tr := TimeRange{
start, end,
}
return &tr
}

// GetThisMonthRangeByCondit 获取前几个月时间
func GetThisMonthRangeByCondit(ti time.Time, n1 int, n2 int) *TimeRange {
today := GetDayStart(ti)
dayOffset := ti.Day()*-1 + 1
start := today.AddDate(0, -n1, dayOffset)
end := start.AddDate(0, n2, 0).Add(BackOffset)
tr := TimeRange{
start, end,
}
return &tr
}

// GetLastMonthRange 获取上一个月
func GetLastMonthRange() *TimeRange {
ti := time.Now().AddDate(0, -1, 0)
return GetMonthRange(ti)
}

// GetYearRange 1945-10-10 12:12:12 --> [1945-01-01 00:00:00, 1945-12-31 23:59:59]
func GetYearRange(ti time.Time) *TimeRange {
st := time.Date(ti.Year(), time.January, 1, 0, 0, 0, 0, ti.Location())
end := st.AddDate(1, 0, 0).Add(BackOffset)
tr := TimeRange{
st, end,
}
return &tr
}

// WeekIntervalTime 获取本周、上周、下一周的时间
func WeekIntervalTime(week int) (int64, int64) {
now := time.Now()
offset := int(time.Monday - now.Weekday())
if offset > 0 {
offset = -6
}
year, month, day := now.Date()
thisWeek := time.Date(year, month, day, 0, 0, 0, 0, time.Local)
startTime := thisWeek.AddDate(0, 0, offset+7*week).Format("2006-01-02") + " 00:00:00"
endTime := thisWeek.AddDate(0, 0, offset+6+7*week).Format("2006-01-02") + " 23:59:59"
return Str2Stamp(startTime), Str2Stamp(endTime)
}

func Str2Time(formatStr string) time.Time {
timeLayout := "2006-01-02 15:04:05"
loc, _ := time.LoadLocation("Local")
theTime, _ := time.ParseInLocation(timeLayout, formatStr, loc)
return theTime
}
func Str2Stamp(formatTimeStr string) int64 {
timeStruct := Str2Time(formatTimeStr)
millisecond := timeStruct.UnixNano() / 1e6
return millisecond
}
func Stamp2Str(stamp int64) string {
timeLayout := "2006-01-02"
str := time.Unix(stamp/1000, 0).Format(timeLayout)
return str
}

// TimeAreaTrans .
func TimeAreaTrans(timeType int, inputTime int64) string {
var timeLoation *time.Location
//区域切换
if timeType == 1 {
timeLoation = time.FixedZone("UTC/GMT", -3*3600)
} else if timeType == 2 {
timeLoation = time.FixedZone("CST", 8*3600)
} else {
timeLoation = time.FixedZone("CST", 8*3600)
}
//时间戳转日期,加时区
now := inputTime / 1000
transDate := time.Unix(now, 0).In(timeLoation).Format("2006-01-02 15:04:05")
return transDate
}
func StampStrOther(stamp int64) string {
timeLayout := "20060102"
str := time.Unix(stamp/1000, 0).Format(timeLayout)
return str
}

标签:10,ti,return,TimeRange,时间,func,time,GO,操作
From: https://www.cnblogs.com/lisus2000/p/17073041.html

相关文章

  • 二. Intellij IDEA 巅峰操作- IDEA 配置
    配置1.界面优化原则:界面元素越小,界面利用效率越高不同的色彩在视觉上更容易体现不同元素的差异基于以上两点,可以通过相关插件以及IDEA本身的配置来对界面进......
  • 一. Intellij IDEA 巅峰操作-引言
    引言为什么标题叫"巅峰操作"?为了致敬小饭的《巅峰之智》系列笔者在指导或者观察其他开发人员进行开发的过程中发现,很多开发人员的对于IDEA的使用效率较低,出现的......
  • django Orm group by
    在django的orm里面想要groupby一个模型的时候遇到一个问题,根据官方文档的调教,怎么都没办法。1、ormmodelclassCvmAlarmDataByMetric(models.Model):"""cv......
  • 【Linux命令----版本升级】Golang 在linux升级版本
    原文:http://turbock79.cn/?p=3859在vscode中使用go1.15模块智能加载显示代码时,存在问题,可能是兼容性或其他问题。通过升级golang到1.16以上,可以实现VScode自动加载的正......
  • 操作系统 - 进程与线程
    进程和线程......
  • ORM哪家强?java,c#,php,python,go 逐一对比, 网友直呼:全面客观
    前言最近一段时间,我使用golang开发了一个新的ORM库。为了让这个库更好用,我比较研究了各语言的主流ORM库,发现有一些语言的ORM库确实很好用,而有另外一些语言的库那不是一般......
  • 操作系统 - 文件系统
    Linux所有文件都建立在虚拟文件系统(VirtualFileSystemVFS)之上。Linux支持每个目录用不同的文件系统,而文件也可能是指磁盘,内存,网卡,输入输出设备等。Linux:一切皆文......
  • 分布式操作系统具体是指什么操作系统?全篇干货
    分布式操作系统是一类操作系统,其中多台计算机组成一个逻辑上的单一系统。这些计算机可以在物理上分布在不同地点,也可以在同一地点。分布式操作系统的历史可以追溯到196......
  • ReplaceGoogleCDN扩展功能使用二:拦截请求域名
    文档说明:只记录关键地方;2023-01-29使用例子:例子:拦截访问域名https://www.jingjingxyk.com更多玩法,可配合content_scripts实现清除内容农场规则例子[{......
  • 操作系统 - 计算机组成原理
    冯诺依曼模型CPU每次可以计算4个byte-32位CPU;每次可以计算8个byte-64位CPU;32和64称为CPU的位宽。寄存器离CPU近的存储来存储需要被计算的数字PC寄存......