muduo源码解析8-date类
date
class date:copyable
{
};
作用:
此类作用主要是实现年月日和julianDay的互相转换
内部最重要的一个数据成员m_julianDayNumber
在mymuduo::detail中提供了相互转换的两个函数getJulianDayNumber和getYearMonthDay具体如何转换的内容没有深究.
注意构造函数可以用julianday,年月日,struct tm三种类型去初始化,实际上都是年月日和julianDay之间的相互转换.
toIosString 返回 格式化字符串 yyyy-mm-dd
另外提供了一些返回年,月,日,周几的函数
成员变量:
struct YearMonthDay
{
int year; //1900-2500
int month; //1-12
int day; //1-31
}; public:
static const int kDaysPerWeek=; //一周7天
static const int kJulianDayof1970_01_01;//1970.1.1至今的julianDay
private:
int m_julianDayNumber;
成员函数:
//一些构造函数,空,用年月日,julianDay,struct tm初始化内部m_julianDayNumber
date():m_julianDayNumber(){}
date(int year,int mon,int day); explicit date(int julianDayNum):m_julianDayNumber(julianDayNum){}
explicit date(const struct tm&);
//交换两个date类型,实际上交换内部m_julianDayNumber的值
void swap(date& that)
{
std::swap(this->m_julianDayNumber,that.m_julianDayNumber);
}
//m_julianDayNumber是否>0
bool valid()const {return m_julianDayNumber>;} //格式化类型 yyyy-mm-dd
string toIsoString() const; //返回年月日类型
YearMonthDay yearMonthDay() const; //返回:年,月,日,周几
int year() const{return yearMonthDay().year;}
int month() const{return yearMonthDay().month;}
int day() const{return yearMonthDay().day;} int weekDay() const
{
return (m_julianDayNumber+)%kDaysPerWeek;
} //获取内部数据成员m_julianDayNumber
int julianDayNumber()const{return m_julianDayNumber;}
detail命名空间内部重要函数:
namespace mymuduo { namespace detail{
char require_32_bit_integer_at_least[sizeof(int) >= sizeof(int32_t) ? : -];
//detail中最重要的两个函数,是实现年月日和m_julianDayNumber转换的最基本函数
//根据年月日获得julian日
int getJulianDayNumber(int year, int month, int day)
{
(void) require_32_bit_integer_at_least; // no warning please
int a = ( - month) / ;
int y = year + - a;
int m = month + * a - ;
return day + (*m + ) / + y* + y/ - y/ + y/ - ;
} //根据julian日获得年月日
struct date::YearMonthDay getYearMonthDay(int julianDayNumber)
{
int a = julianDayNumber + ;
int b = ( * a + ) / ;
int c = a - ((b * ) / );
int d = ( * c + ) / ;
int e = c - (( * d) / );
int m = ( * e + ) / ;
date::YearMonthDay ymd;
ymd.day = e - (( * m + ) / ) + ;
ymd.month = m + - * (m / );
ymd.year = b * + d - + (m / );
return ymd;
}
} const int date::kJulianDayof1970_01_01 = detail::getJulianDayNumber(, , );
}
测试:
#include"base/date.h"
#include<iostream> namespace mymuduo{
namespace currentthread {
void cacheTid()
{
}
}
} int main()
{
struct tm* ttm;
time_t tt=time(NULL); ttm=localtime(&tt); mymuduo::date dt1(,,),dt2(*ttm);
std::cout<<dt1.julianDayNumber()<<" "<<dt2.julianDayNumber()<<std::endl;
std::cout<<dt1.toIsoString()<<std::endl; }
打印结果:
2459085 2459085
2020-08-23
muduo源码解析8-date类的更多相关文章
- muduo源码解析5-mutex相关类
mutexlock和mutexlockguard class mutexlock:noncopyable { }: class mutexlockguard:noncopyable { }: 作用: ...
- Mybatis源码解析3——核心类SqlSessionFactory,看完我悟了
这是昨晚的武汉,晚上九点钟拍的,疫情又一次来袭,曾经熙熙攘攘的夜市也变得冷冷清清,但比前几周要好很多了.希望大家都能保护好自己,保护好身边的人,生活不可能像你想象的那么好,但也不会像你想象的那么糟. ...
- AOP源码解析:AspectJAwareAdvisorAutoProxyCreator类的介绍
AspectJAwareAdvisorAutoProxyCreator 的类图 上图中一些 类/接口 的介绍: AspectJAwareAdvisorAutoProxyCreator : 公开了Asp ...
- muduo源码解析11-logger类
logger: class logger { }; 在说这个logger类之前,先看1个关键的内部类 Impl private: //logger内部数据实现类Impl,内部含有以下成员变量 //时间 ...
- muduo源码解析10-logstream类
FixedBuffer和logstream class FixedBuffer:noncopyable { }: class logstream:noncopyable { }: 先说一下包含的头文件 ...
- Netty源码解析 -- 内存对齐类SizeClasses
在学习Netty内存池之前,我们先了解一下Netty的内存对齐类SizeClasses,它为Netty内存池中的内存块提供大小对齐,索引计算等服务方法. 源码分析基于Netty 4.1.52 Nett ...
- AOP源码解析:AspectJExpressionPointcutAdvisor类
先看看 AspectJExpressionPointcutAdvisor 的类图 再了解一下切点(Pointcut)表达式,它指定触发advice的方法,可以精确到返回参数,参数类型,方法名 1 pa ...
- java源码解析之Object类
一.Object类概述 Object类是java中类层次的根,是所有类的基类.在编译时会自动导入.Object中的方法如下: 二.方法详解 Object的方法可以分成两类,一类是被关键字fin ...
- Bulma 源码解析之 .columns 类
{说明} 这一部分的源码内容被我简化了,另外我还额外添加了一个辅助类 is-grow. .columns // 修饰类 &.is-centered justify-content: cente ...
- java源码解析之String类(二)
上一节主要介绍了String类的一些构造方法,主要分为四类 无参构造器:String(),创建一个空字符串"",区别于null字符串,""已经初始化,null并 ...
随机推荐
- 第十章 函数式接口&Stream流
10.1.函数式接口 10.1.1.概述 有且仅有一个抽象方法的接口,并且可以通过在类上标注@FunctionalInterface注解进行检测,建议自定义的函数式接口都加上这个注解 10.1.2.函 ...
- HTML 布局 - 使用<div> 元素
网站布局 大多数网站会把内容安排到多个列中(就像杂志或报纸那样).高佣联盟 www.cgewang.com 大多数网站可以使用 <div> 或者 <table> 元素来创建多列 ...
- 一本通 1783 矩阵填数 状压dp 容斥 计数
LINK:矩阵填数 刚看到题目的时候感觉是无从下手的. 可以看到有n<=2的点 两个矩形. 如果只有一个矩形 矩形外的方案数容易计算考虑 矩形内的 必须要存在x这个最大值 且所有值<=x. ...
- 一本通 高手训练 1782 分层图 状压dp
LINK:分层图 很精辟的一道题 写的时候没带脑子 导致搞了半天不知道哪错了. 可以想到状压每次到某一层的状态 然后这个表示方案数 多开一维表示此时路径条数的奇偶即可. 不过显然我们只需要知道路径条数 ...
- 2019 HL SC day2
今天讲的是网络流 大部分题目都写过了 这里 就总结一番. bzoj 1066 裸的最大流 不过需要拆点细节方面有一点坑 剩下的 没什么了. //#include<bits/stdc++.h> ...
- MYSQL-MGR架构配置
MGR安装:机器列表:pc-s4 s4 --2pc-s3 s3 --1pc-s1 s1 --1pc-s2 s2 --1 1,为初始化搭建,2,为后续添加 对1 三个数据库先进行初始化========= ...
- 字节真题 ZJ26-异或:使用字典树减少计算次数
原题链接 题目描述: 个人分析:从输入数据看,要处理的元素个数(n)没有到达 10^9 或 10^8 级,或许可以使用暴力?但是稍微计算一下,有 10^5 * (10^5 - 1) / 2 = 10^ ...
- .Net Core下基于Emit的打造AOP
之前的基于DispatchProxy的AOP组件,实现了属性注入,但是这个依旧有很多限制 比如不支持构造器注入,继承DispatchProxy的子类必须是公开类 个人有点代码洁癖,不喜欢这种不能控制的 ...
- elasticsearch技术解析与实战ES
elasticsearch技术解析与实战ES 下载地址: https://pan.baidu.com/s/1NpPX05C0xKx_w9gBYaMJ5w 扫码下面二维码关注公众号回复100008 获取 ...
- beyond compare4 密钥 亲测可用
beyond compare4过了试用期: 密钥: w4G-in5u3SH75RoB3VZIX8htiZgw4ELilwvPcHAIQWfwfXv5n0IHDp5hv1BM3+H1XygMtiE0-J ...