momentago项目
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 0°
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)
转换为time.Time格式
计算与当前时间的秒数差值
转为不大于某个时间单位的时间的最小时间单位
比如 121 秒 大于2分钟,小于一小时 就得到 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. 设计方法:
通过对输入的字符串进行分割,去map中查找该字符对应的值,从而实现时间格式的转化。
输出格式转化为中文,通过输出的时间去map中查找映射的值,从而实现中文格式输出。
2.4日历格式时间
func Calender(datetime interface{}) string
- 将传入时间与现在时间(进行时区换算,确保两时间在同一时区下)以日期形式(即不计算时分秒)和当前日期进行差算,除以一天的时间,得到传入时间的日期与当天日期天数的差值如果在[-1,1]之间则为昨天,今天,明天,然后拼接传入时间的时分秒,如果不是则进入2
- 将计算时间分为三部分:0-6(上星期),7-13(这星期),14-20(下星期),确认当前星期,定值为7-13(星期一到星期日),将差值加上这个定值得到的值如果在这三个区间之间,则得到对应星期,,然后拼接传入时间的时分秒,如果不在这三个区间则进入3
- 直接输出年月日时分秒。
3.亮点
功能简洁,使用方便,轻量高效。
4.总结
4.0总结
momentago 实现了四个功能函数,parse,add,format,calender,如果有需要以上功能可以直接引入依赖
go get github.com/Tim3Triver/memontago
4.1收获
- 熟悉了go中的time包
- 开发一个依赖需要注意的地方:
- 明确代码中对外暴露的接口
- 良好的代码结构
4.2 不足
- 团队合作方面
- 沟通不够好
- 分工虽然明确,但是实现的不够完美
momentago项目相关推荐
- 在k8s中使用gradle构建java web项目镜像Dockerfile
在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...
- Dockerfile springboot项目拿走即用,将yml配置文件从外部挂入容器
Dockerfile 将springboot项目jar包打成镜像,并将yml配置文件外挂. # 以一个镜像为基础,在其上进行定制.就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜 ...
- SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos
SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...
- Gradle 将项目publish到Nexus,Kotlin将项目发布到nexus,springboot项目发布到maven仓库
示例见:Gitte 公仓设置 在项目中添加maven-publish的插件 plugins {kotlin("jvm") version "1.3.72"kot ...
- springboot项目使用junit4进行单元测试,maven项目使用junit4进行单元测试
首先,maven项目中引入依赖 <dependency><groupId>junit</groupId><artifactId>junit</ar ...
- IDEA设置单个文件、单个包、单个项目的编码格式
IDEA设置单个文件.单个包.单个项目的编码格式 File-> Settings-> File Enclodings 选择编码格式,确定即可. 注意:此处的编码格式设定以后,该包已经存在的 ...
- spring boot项目 中止运行 最常用的几种方法
spring boot项目 中止运行 最常用的几种方法: 1. 调用接口,停止应用上下文 @RestController public class ShutdownController impleme ...
- 两步完成项目定时启动,java项目定时启动
两步完成项目定时设置: 在需要定时启动或运行的方法上面加上注解@Scheduled //当天只跑一次 @Scheduled(cron = "0 40 21 * * ?") 在启动类 ...
- Myeclipse中项目没有代码错误提示,jsp页面无编译迹象?如何解决
在使用Myeclipse开发项目时,发现jsp页面中嵌入的java代码没有编译的迹象,错误的get方法没有报错,没有报错信息我们如何知道我们开发的内容是正确的呢? 接下来就演示一下如何解决
最新文章
- 别人总结的批处理技巧
- iOS旋钮动画-CircleKnob
- stm32串口学习(一)
- 面向对象基础及UML建模语言
- 在Linux系统中,使用useradd命令新建用户后,登录该用户时shell开头为$,不显示用户名和路径,如下:...
- H3C进入目录---用户视图
- 【NOIP2013】【Luogu1966】火柴排队(逆序对)
- sysstat工具包提供的主要命令
- Freeswitch与外域IP对接之incoming call
- python如何输入数据形成列表_将Python字典/列表插入到SQL数据库中最有效的方法是什么?...
- 用matlab画相频曲线_用MATLAB进行系统频率特性曲线绘制
- 论文-公式对齐和右侧自动编号
- 深度学习NLP-词向量篇(含代码实现)
- 如何批量保存网页照片
- java实现退出重启后保存_JAVA实现关机、重启等
- maven_使用Maven Failsafe和JUnit @Category将集成测试与单元测试分开
- Sigmoid函数解析
- 基于VC++的3D地形绘制与纹理贴图
- 室外无人驾驶挑战赛小结-2019‘恩智浦’杯全国大学生智能车竞赛
- 【渝粤教育】电大中专计算机职业素养 (9)作业 题库
热门文章
- c++求一维数组标准差
- ZBarReaderView屏幕旋转问题
- 当电脑回收站图标不见后,这4种方法帮你快速恢复
- [Objc]_[获取Mac下的字体库支持的所有字体名称]
- (4.6.29.3)插件化之代码加载:启动Activity等四大组件之hook方式
- 起名必须与先天“四柱”相结合
- Lenovo E42-80安装Linux的注意事项
- 【Overleaf】latex设置表格字体大小
- 如何将sql文件导入mysql
- C++筑器 引用生死唯一