首页 > 其他分享 >go时间区间统一值对象

go时间区间统一值对象

时间:2024-12-08 11:28:19浏览次数:9  
标签:End Start 对象 self 区间 time go return DateRange

package daterange

import (
    "git.ichub.com/general/webcli120/goconfig/base/basedto"
    "github.com/gogf/gf/v2/os/gtime"
    "icd/utils"
    "time"
)

type DateRange struct {
    basedto.BaseEntity
    Start        time.Time      //2021-01-01 00:00:00
    End          time.Time      //2021-01-01 23:59:59
    End2         time.Time      ///2021-01-02 00:00:00  第二天00:00:00
    ZoneShanghai *time.Location `json:"-"`
    ZoneUtc      *time.Location
}

func NewDateRange() *DateRange {
    var dr = &DateRange{}
    dr.InitProxy(dr)
    dr.ZoneShanghai, _ = time.LoadLocation("Asia/Shanghai")
    dr.ZoneUtc = time.UTC

    return dr
}

func (self *DateRange) Yesterday() DateRange {
    return DateRange{}
}
func (self *DateRange) DayBefore() DateRange {
    return DateRange{}
}

func (self *DateRange) ToDateRangeStr() *DateRangeStr {
    var strday = FindBeanDateRangeStr()
    strday.Start = gtime.NewFromTime(self.Start).Layout("2006-01-02")
    strday.End = gtime.NewFromTime(self.End).Layout("2006-01-02")
    return strday
}
func (self *DateRange) ToId(memberId int64) string {
    return self.Start.Format("2006-01-02") + "|" + utils.FormatInt(memberId) + "|0|0"

}
func (self *DateRange) Clone() *DateRange {
    var c = *self
    return &c
}
func (self DateRange) BeforeDay() *DateRange {
    var c = self.Clone()
    c.Start = c.Start.Add(-48 * time.Hour)
    c.End = c.End.Add(-48 * time.Hour)
    return c
}
func (self DateRange) YesterDay() *DateRange {
    var c = self.Clone()
    c.Start = c.Start.Add(-24 * time.Hour)
    c.End = c.End.Add(-24 * time.Hour)
    return c
}
func (self DateRange) Tommorow() *DateRange {
    var c = self.Clone()
    c.Start = c.Start.Add(24 * time.Hour)
    c.End = c.End.Add(24 * time.Hour)
    return c
}

func (self DateRange) ToUtcTime() *DateRange {
    var c = self.Clone()
    c.Start = c.Start.In(self.ZoneUtc)
    c.End = c.End.In(self.ZoneUtc)
    return c
}
func (self DateRange) ToShanghaiTime() *DateRange {
    var c = self.Clone()
    c.Start = c.Start.In(self.ZoneShanghai)
    c.End = c.End.In(self.ZoneShanghai)
    return c
}

func (self DateRange) ToShanghaiDateOnly() *DateRange {
    var c = self.ToShanghaiTime()
    c.Start = time.Date(c.Start.Year(), c.Start.Month(), c.Start.Day(), 0, 0, 0, 0, time.UTC)
    c.End = time.Date(c.End.Year(), c.End.Month(), c.End.Day(), 23, 59, 59, 0, time.UTC)
    c.End2 = c.Start.Add(time.Hour * 24)
    return c
}
func (self DateRange) ToUtcDateOnly() *DateRange {
    var c = self.ToUtcTime()
    c.Start = time.Date(c.Start.Year(), c.Start.Month(), c.Start.Day(), 0, 0, 0, 0, time.UTC)
    c.End = time.Date(c.End.Year(), c.End.Month(), c.End.Day(), 23, 59, 59, 0, time.UTC)
    c.End2 = c.Start.Add(time.Hour * 24)
    return c
}

// shanghai datestr used by es
func (self DateRange) ToShanghaiDateStr() *DateRangeStr {
    var c = self.ToShanghaiDateOnly()
    var dayStr = NewDateRangeStr()
    dayStr.Start = gtime.NewFromTime(c.Start).Layout("2006-01-02") + "T00:00:00+08:00"
    dayStr.End = gtime.NewFromTime(c.End).Layout("2006-01-02") + "T23:59:59+08:00"
    var end2 = c.Start.Add(24 * time.Hour)
    dayStr.End2 = gtime.NewFromTime(end2).Layout("2006-01-02") + "T23:59:59+08:00"
    return dayStr
}

标签:End,Start,对象,self,区间,time,go,return,DateRange
From: https://blog.csdn.net/leijmdas/article/details/144323490

相关文章

  • 用requests对象设计实现一个简单的计算加减乘除运算的网页程序
    为了实现一个简单的网页计算器程序,能够进行加、减、乘、除运算,我们可以使用`Flask`(一个轻量级的PythonWeb框架)来创建网页应用,并结合`requests`对象来处理用户通过表单或URL参数提交的运算请求。###项目结构假设我们的项目结构如下:```calculator_app/│├──app.py#Fla......
  • go实战微服务:数据服务开发
    Go实战微服务:数据服务开发本文将详细介绍在Go语言环境下,如何进行微服务的数据服务开发。内容涵盖中间件的实现、响应内容的处理、自定义响应格式(protobuf、JSON)、快速排序算法及其应用,以及Redisearch索引和查询的使用。基于函数实现中间件初级用法:简单请求日志中间件应......
  • 【Java】——类和对象(二)
    前文回顾在类和对象(一)中,介绍了面向对象和面向过程的区别,还介绍了类的定义、使用及类是如何实例化的,再引出了this引用和几种构造方法,最后是对象的打印接下来将要介绍1.包(package)1.1为什么使用包在前文提到一般一个文件当中只定义一个类,随着我们代码的编写,类会越来越多,看起......
  • 推荐一个Go版本的支付库
    推荐一个Go版本的支付库原创 Eagle1949 技术源泉  2024年12月06日21:24 河南 听全文gopay是一个使用Golang编写的支付库。现在支持微信、支付宝、QQ、通联支付、拉卡拉、PayPal。使用方法如下:引入gopay库goget-ugithub.com/go-pay/gopay使用示例:import("......
  • 修改网站源logo,如何更改网站的源Logo
    网站Logo是品牌识别的重要元素,有时需要更换新的Logo以提升品牌形象。以下是详细步骤,帮助您更改网站的源Logo:登录后台管理系统:使用管理员账号登录网站的后台管理系统。导航到主题或模板管理界面,找到Logo设置选项。上传新Logo:在Logo设置界面中,点击“浏览”或“选择文件......
  • 类和对象(上)
    目录类的定义类定义格式访问限定符类域实例化实例化概念对象大小this指针C++和C语⾔实现Stack对⽐类的定义类定义格式①class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性......
  • 【C++】continue语句、goto语句
    1、continue 语句作用:在循环语句中,跳过本次循环中余下尚未执行的语句。继续下一次循环。注意:continue只能用于循环中。示例:代码://continue的用法#include<iostream>usingnamespacestd;intmain(){   //如果是奇数,则输出,否则不输出   for(inti=1......
  • Python 潮流周刊#80:Django 项目性能调优(摘要)
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。分享了12篇文章,12个开源项目,3则音视频,全文2100字。以下是本期摘要:......
  • 区间同余问题
    区间同余问题例题:CF2050FMaximummoduloequality题意给定一个长度为\(n\)的序列\({a_n}\),有\(Q\)个询问,每次询问给定一个区间\([l,r]\),让你找一个最大的\(m\),使得区间内所有的\(a_i\modm\)相同,可以证明一定存在这样一个\(m\)(\(1\))。分析看着很头痛,因为完全不......
  • gorm:debug方法
    一,debug方法的作用:GORM提供了一个 Debug 方法,可以在链式调用中打印出生成的 SQL语句和执行时间。一般用于开发或者是线上排查某个问题时使用。Debug单个操作时,会将当前操作的log级别调整为logger.Info官方文档地址:https://gorm.io/zh_CN/docs/logger.html二,例子:......