1.认识momentago

项目地址:https://github.com/Tim3Triver/memontago

momentago是go语言time包的部分功能的封装和扩展,主要是作为一个外部依赖来辅助使用。

主要实现了四个功能:

  • 1.解析时间----以**“n 秒前”**的格式显示出来
  • 2.加减时间----给出一个时间,再给出一个数字和一个单位,返回加减后的时间
  • 3.格式化时间----给出一个时间,再给出一个格式,进行格式化,返回格式化之后的时间。
  • 4.日历格式的时间----传入的时间是今天的时间就返回:”今天+传入的时间“ 传入的时间是昨天的时间就返回:”昨天+传入的时间“ ,包括 ”这周 + 时间“ ,”日期 + 时间“。

2.详细介绍

2.0基本概念

Unix时间戳从1970年1月1日(UTC/GMT的午夜)0时0分0秒开始所经过的秒数,不考虑闰秒

字符串时间:2006-01-02 15:04:05 格式的字符串表示的时间 需要加上时区才有意义,否则会有歧义,这里规定没有给出时区时,默认代表就是UTC时间

时区:规定将全球划分为24个时区(东、西各12个时区)。规定英国(格林尼治天文台旧址)为中时区(零时区)、东1—12区,西1—12区。每个时区横跨经度15度,时间正好是1小时。最后的东、西第12区各跨经度7.5度,以东、西经180度为界。每个时区的中央经线上的时间就是这个时区内统一采用的时间,称为区时,相邻两个时区的时间相差*1*小时。

中国东8区的时间总比泰国东7区的时间早1小时,而比日本东9区的时间晚1小时。

UTC 7.5°W~7.5°E

time.Time时间:本质上还是一个时间戳 自动根据电脑所在时区,显示字符串时间

time.Time{} 表示的时间是 0001-01-01 00:00:00 +0000 UTC 表示从第一年1月1日0:0:0的秒数为0

与Unix时间戳的关系 :Unix时间戳 + 从第1年1月1日0:0:0到1970年1月1日的秒数 = time.Time时间戳

2.1解析时间

func Parse(datetime interface{}, options ...string) (string, error)
  1. 转换为time.Time格式

  2. 计算与当前时间的秒数差值

  3. 转为不大于某个时间单位的时间的最小时间单位

比如 121 秒 大于2分钟,小于一小时 就得到 2分钟

  1. 根据配置获取到语言
  2. 根据相应标记的条件,输出最终结果



2.2加减时间

func Add(dateTime interface{}, number int, DurUnit string) (time.Time, error)

dataTime: 用户给出的时间

number:增加的数量

DurUnit:时间单位

首先通过把dataTime转换为time.Time,在通过调用time包中的Add(),AddDate()函数,实现增加减少时间,返回结果。

func Sub(dateTime interface{}, number int, DurUnit string) (time.Time, error) {return Add(dateTime, -number, DurUnit)
}

2.3格式化时间

func Format(datetime interface{}, format string) (string, error)

1. Format功能介绍:

Format 日期格式化,通过特定字母进行解析当前时间

比如:'MMMM Do YYYY, h:mm:ss a’代表六月 9日 2022, 9:22:39 晚上,‘MMMM’就代表六月。

2. 设计理念:

Go 语言中时间格式化的布局 是2006-01-02 15:04:05.000,我们在相应默认的时间格式化的基础上增加部分功能,从而达到字符具有时间格式化功能,同时将时间以中文的格式输出。

3. 设计方法:

  1. 通过对输入的字符串进行分割,去map中查找该字符对应的值,从而实现时间格式的转化。

  2. 输出格式转化为中文,通过输出的时间去map中查找映射的值,从而实现中文格式输出。

2.4日历格式时间

func Calender(datetime interface{}) string
  1. 将传入时间与现在时间(进行时区换算,确保两时间在同一时区下)以日期形式(即不计算时分秒)和当前日期进行差算,除以一天的时间,得到传入时间的日期与当天日期天数的差值如果在[-1,1]之间则为昨天,今天,明天,然后拼接传入时间的时分秒,如果不是则进入2
  2. 将计算时间分为三部分:0-6(上星期),7-13(这星期),14-20(下星期),确认当前星期,定值为7-13(星期一到星期日),将差值加上这个定值得到的值如果在这三个区间之间,则得到对应星期,,然后拼接传入时间的时分秒,如果不在这三个区间则进入3
  3. 直接输出年月日时分秒。

3.亮点

功能简洁,使用方便,轻量高效。

4.总结

4.0总结

momentago 实现了四个功能函数,parse,add,format,calender,如果有需要以上功能可以直接引入依赖

go get github.com/Tim3Triver/memontago

4.1收获

  1. 熟悉了go中的time包
  2. 开发一个依赖需要注意的地方:
    1. 明确代码中对外暴露的接口
    2. 良好的代码结构

4.2 不足

  1. 团队合作方面

    1. 沟通不够好
    2. 分工虽然明确,但是实现的不够完美

momentago项目相关推荐

  1. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

  2. Dockerfile springboot项目拿走即用,将yml配置文件从外部挂入容器

    Dockerfile 将springboot项目jar包打成镜像,并将yml配置文件外挂. # 以一个镜像为基础,在其上进行定制.就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜 ...

  3. SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos

    SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...

  4. Gradle 将项目publish到Nexus,Kotlin将项目发布到nexus,springboot项目发布到maven仓库

    示例见:Gitte 公仓设置 在项目中添加maven-publish的插件 plugins {kotlin("jvm") version "1.3.72"kot ...

  5. springboot项目使用junit4进行单元测试,maven项目使用junit4进行单元测试

    首先,maven项目中引入依赖 <dependency><groupId>junit</groupId><artifactId>junit</ar ...

  6. IDEA设置单个文件、单个包、单个项目的编码格式

    IDEA设置单个文件.单个包.单个项目的编码格式 File-> Settings-> File Enclodings 选择编码格式,确定即可. 注意:此处的编码格式设定以后,该包已经存在的 ...

  7. spring boot项目 中止运行 最常用的几种方法

    spring boot项目 中止运行 最常用的几种方法: 1. 调用接口,停止应用上下文 @RestController public class ShutdownController impleme ...

  8. 两步完成项目定时启动,java项目定时启动

    两步完成项目定时设置: 在需要定时启动或运行的方法上面加上注解@Scheduled //当天只跑一次 @Scheduled(cron = "0 40 21 * * ?") 在启动类 ...

  9. Myeclipse中项目没有代码错误提示,jsp页面无编译迹象?如何解决

    在使用Myeclipse开发项目时,发现jsp页面中嵌入的java代码没有编译的迹象,错误的get方法没有报错,没有报错信息我们如何知道我们开发的内容是正确的呢? 接下来就演示一下如何解决

最新文章

  1. 别人总结的批处理技巧
  2. iOS旋钮动画-CircleKnob
  3. stm32串口学习(一)
  4. 面向对象基础及UML建模语言
  5. 在Linux系统中,使用useradd命令新建用户后,登录该用户时shell开头为$,不显示用户名和路径,如下:...
  6. H3C进入目录---用户视图
  7. 【NOIP2013】【Luogu1966】火柴排队(逆序对)
  8. sysstat工具包提供的主要命令
  9. Freeswitch与外域IP对接之incoming call
  10. python如何输入数据形成列表_将Python字典/列表插入到SQL数据库中最有效的方法是什么?...
  11. 用matlab画相频曲线_用MATLAB进行系统频率特性曲线绘制
  12. 论文-公式对齐和右侧自动编号
  13. 深度学习NLP-词向量篇(含代码实现)
  14. 如何批量保存网页照片
  15. java实现退出重启后保存_JAVA实现关机、重启等
  16. maven_使用Maven Failsafe和JUnit @Category将集成测试与单元测试分开
  17. Sigmoid函数解析
  18. 基于VC++的3D地形绘制与纹理贴图
  19. 室外无人驾驶挑战赛小结-2019‘恩智浦’杯全国大学生智能车竞赛
  20. 【渝粤教育】电大中专计算机职业素养 (9)作业 题库

热门文章

  1. c++求一维数组标准差
  2. ZBarReaderView屏幕旋转问题
  3. 当电脑回收站图标不见后,这4种方法帮你快速恢复
  4. [Objc]_[获取Mac下的字体库支持的所有字体名称]
  5. (4.6.29.3)插件化之代码加载:启动Activity等四大组件之hook方式
  6. 起名必须与先天“四柱”相结合
  7. Lenovo E42-80安装Linux的注意事项
  8. 【Overleaf】latex设置表格字体大小
  9. 如何将sql文件导入mysql
  10. C++筑器 引用生死唯一