C++ DateTime 结构
OS:Win7 ,Tools:VS2015
DateTime.h
#pragma once struct DateTime
{
public:
unsigned Year; // years since 1900
unsigned short Month; // months since January - [0, 11]
unsigned short Day; // day of the month - [1, 31]
unsigned short Hour; // hours since midnight - [0, 23]
unsigned short Minute; // minutes after the hour - [0, 59]
unsigned short Seconds; // seconds after the minute - [0, 60] including leap second
//unsigned short DayOfWeek;// days since Sunday - [0, 6]
//unsigned short DayOfYear;// days since January 1 - [0, 365] public:
//ctor
DateTime(unsigned y, unsigned short m, unsigned short d, unsigned short h, unsigned short mi, unsigned short s);
DateTime(); public:
//Is LeapYear
bool IsLeapYear();
//Day Of Week
const char* DayOfWeek();
/*Day Of Year*/
int DayOfYear(); public:
//Start Elapsed
static void Start();
//End Elapsed , return Secs
static double End(); private:
const char* _WeekDay_CHS[] = { "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" };//Week Of English
const char* _WeekDay_ENG[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };//Week Of Chinese private:
const int DaysOfMonth[] = { ,,,,,,,,,,, };//Days of Month
//const int* _DaysOfMonth = new int[12]{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; private:
//静态变量必须在外部初始化
static long Elapsed; };
DateTime.cpp
//localtime 函数
#define _CRT_SECURE_NO_WARNINGS #include <time.h> #include "DateTime.h"
//测试
#include <iostream> //初始化静态变量
long DateTime::Elapsed = NAN;//数据丢失警告忽略。 DateTime::DateTime(unsigned y, unsigned short m, unsigned short d, unsigned short h, unsigned short mi, unsigned short s)
{
Year = y;
Month = m;
Day = d;
Hour = h;
Minute = mi;
Seconds = s;
} DateTime::DateTime()
{
//结构值 为 1990年0月 起 0:星期日,1:星期一
time_t dt;
struct tm* now;
time(&dt);
now = localtime(&dt); /* 出错误
time_t dt;
struct tm* now = { 0 };
localtime_s(now, &dt);
*/
Year = now->tm_year + ;
Month = now->tm_mon + ;
Day = now->tm_mday;
Hour = now->tm_hour;
Minute = now->tm_min;
Seconds = now->tm_sec;
} bool DateTime::IsLeapYear()
{
return ((Year % == && Year % != ) || (Year % == ));
} int DateTime::DayOfYear()
{
int tmp = ;
//取数组长度
int len = (sizeof(DaysOfMonth) / sizeof(DaysOfMonth[]));
//测试
//std::cout << len << std::endl;
for (int i = ; i < Month - ; i++)
{
tmp += DaysOfMonth[i];
}
if (IsLeapYear())
tmp++;
return tmp + Day;
} const char* DateTime::DayOfWeek()
{
/*//方法一:蔡勒公式,公式中的除法取整数。 符号意义: w:星期 eg:{0=星期日,1=星期一,...}
c:年数前两位 eg:{2015 c=20}
y:年数后两位 eg:{2015 y=15}
m:月 eg:{2015年2月28日 m=14,此时y=2014} 注意 1,2月要当成上一年的13,14月计算
d:日 eg:{28日 d=28}
① w=(y + y/4 + c/4 - 2*c + (26 * (m+1))/10 + d - 1) %7
或② w=(c/4 - 2*c + y + y/4 + (13 * (m+1))/5 + d -1) %7 unsigned w, c, y, m, d;
c = Year / 100;
y = Year % 100;
m = Month;
if (Month == 1 || Month == 2)
{
y--;
m += 12;
}
d = Day;
w = (c / 4 - 2 * c + y + y / 4 + (13 * (m + 1)) / 5 + d - 1) % 7;
return _WeekDay_CHS[w];
*/ /*//方法二:基姆拉尔森公式,公式中的除法取整数 符号意义: w:星期 eg:{6=星期日,0=星期一,...}
y:年数 eg:{2015 y=2015}
m:月 eg:{2015年2月28日 m=14,此时y=2014} 注意 1,2月要当成上一年的13,14月计算
d:日 eg:{28日 d=28}
w=(d + 2*m + 3*(m+1)/5 + y + y/4 - y/100 + y/400) %7 unsigned w, y, m, d;
y = Year;
m = Month;
if (Month == 1 || Month == 2)
{
y--;
m += 12;
}
d = Day;
w = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7 +1;
//std::cout << w << std::endl;
return _WeekDay_CHS[w];
*/ /*//方法三:基数法,公式中的除法取整数 1.年基数yb:
平年=1,
闰年=2。
2.月基数mb:该月之前(不含该月)的每月天数的总和除以7取余
平年={0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5},
闰年={0, 3, 4, 0, 2, 5, 0, 3, 6, 1, 4, 6}。
3.符号意义:
w:星期 eg:{0=星期日,1=星期一,...}
y:年份 eg:{2015年3月4日 y=2015}
yb:年基数 eg:{2015年3月4日 yb=1}
mb:月基数 eg:{2015年3月4日 mb=3}
d:日 eg:{2015年3月4日 d=4}
w=(y + y/4 + y/400 - y/100 - yb + mb + d)%7
*/
int NLY[] = { , , , , , , , , , , , };
int LY[] = { , , , , , , , , , , , };
unsigned y, yb, mb, d, w;
if (IsLeapYear())
{
yb = ;
mb = LY[Month - ];
}
else
{
yb = ;
mb = NLY[Month - ];
}
y = Year;
d = Day;
w = (y + y / + y / - y / - yb + mb + d) % ;
return _WeekDay_CHS[w];
} void DateTime::Start()
{
Elapsed = clock();
} double DateTime::End()
{
//测试
/*long tmp = clock() - Elapsed;
std::cout << tmp << std::endl;*/
return static_cast<double>(clock() - Elapsed) / CLOCKS_PER_SEC;
}
Main.cpp
#include <iostream>
#include "DateTime.h" using namespace std; int main()
{
DateTime::Start();
//DateTime::Now();
//DateTime dt2(1997, 3, 4, 22, 58, 31);
DateTime dt2;
cout << dt2.Year << "年" << dt2.Month << "月" << dt2.Day << "日" << dt2.Hour << "时" << dt2.Minute << "分" << dt2.Seconds << "秒" << endl;
cout << dt2.IsLeapYear() << endl;
cout << dt2.DayOfYear() << endl;
cout << dt2.DayOfWeek() << endl; cout << DateTime::End() << endl;
getchar();
return ;
}
C++ DateTime 结构的更多相关文章
- C# DateTime结构的常用方法
在项目开发中,经常会碰到日期处理.比如查询中,可能会经常遇到按时间段查询,有时会默认取出一个月的数据.当我们提交数据时,会需要记录当前日期,等等.下面就看看一些常用的方法. 首先,DateTime是一 ...
- C# DateTime的11种构造函数 [Abp 源码分析]十五、自动审计记录 .Net 登陆的时候添加验证码 使用Topshelf开发Windows服务、记录日志 日常杂记——C#验证码 c#_生成图片式验证码 C# 利用SharpZipLib生成压缩包 Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库
C# DateTime的11种构造函数 别的也不多说没直接贴代码 using System; using System.Collections.Generic; using System.Glob ...
- .NET DateTime类型变量作为参数时设置默认值
一个小的 Tips. .NET 中函数参数的默认值需要是编译时常量.如果参数是引用类型,可以设置Null,如果是值类型,可以设置相应的编译时常量,如整型可以用整数,但对于DateTime(结构体,值类 ...
- 将不确定变为确定~DateTime.MinValue和MaxValue引发的异常
回到目录 问题描述: SqlDateTime 溢出.必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间 概念相关 .Net中的DateTime结 ...
- 【C#】第3章学习要点(三)--常用类和结构的用法
分类:C#.VS2015 创建日期:2016-06-19 使用教材:(十二五国家级规划教材)<C#程序设计及应用教程>(第3版) 一.DateTime结构和TimeSpan结构 DateT ...
- C# - 系统类 - DateTime类
DateTime类 ns:System 此类是一个结构 提供了访问和修改它所代表的时间 创建DateTime实例的几种方式 DateTime time = , , , , , ); Console.W ...
- C#中的DateTime是值类型还是引用类型
近期遇到了DateTime到底是值类型还是引用类型的疑惑,顺势较深入地了解一下DateTime相关的内容 结论:DateTime是值类型,因为DateTime是结构体,而结构体继承自Syste.Val ...
- C# 内置 DateTime类详解
C# 内置 DateTime类详解 摘抄自微软官方文档,用来方便自己查阅:网址:https://msdn.microsoft.com/zh-cn/library/system.datetime(v=v ...
- C#中的DateTime
一.DateTime是值类型还是引用类型的探索 二.了解DateTime结构体 三.DateTime.Now和DateTime.UtcNow是怎么计算出来的 一.DateTime是值类型还是引用类型的 ...
随机推荐
- TCP连接探测中的Keepalive和心跳包
TCP连接探测中的Keepalive和心跳包 tcp keepalive 心跳 保活 Linuxtcp心跳keepalive保活1. TCP保活的必要性 1) 很多防火墙等对于空闲socket自动关闭 ...
- OSG使用更新回调来更改模型
OSG使用更新回调来更改模型 转自:http://blog.sina.com.cn/s/blog_668aae7801017gl7.html 使用回调类实现对场景图形节点的更新.本节将讲解如何使用回调 ...
- iosiPhone屏幕尺寸、分辨率及适配
iosiPhone屏幕尺寸.分辨率及适配 1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point) Scale Fac ...
- hao123列表的实现
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" co ...
- jq制作好看的导航显示效果
先上个效果图: 在关于页面时, 在点击邻居管理后, 实现所在页面的提示,相当于文字导航. 实现方法: js: var a,b; function admin_op(a,b){ if(b==0){ hi ...
- winform把图片存储到数据库
1.先在Form中放一个PictureBox控件,再放三个按钮. 2.双击打开按钮,在里面写如下代码: OpenFileDialog open1 = new OpenFileDialog(); Dia ...
- 对Oracle数据库坏块的理解
1.物理坏块和逻辑坏块 在数据库中有一个概念叫做数据块的一致性,Oracle的数据块的一致性包括了两个层次:物理一致性和逻辑一致性,如果一个数据块在这两个层次上存在不一致性,那就对应到了我们今天要要说 ...
- 2016HUAS暑假集训训练2 K - Hero
题目链接:http://acm.hust.edu.cn/vjudge/contest/121192#problem/K 这也是一道贪心题,刚开始写时以为只要对每一敌人的攻击和血的乘积进行从小到大排序即 ...
- Zabbix自带模板监控MySQL
先使用主机链接Mysql模板 . 然后写获取mysql状态的脚本,即配合zabbix模板里面的参数的脚本. #!/bin/bash MYSQL_USER='zabbix' #这里为在本地数据库授权的账 ...
- 用refresh控制浏览器定时刷新
package cn.itcast.response; import java.io.IOException; import java.util.Random; import javax.servle ...