time_t time(time_t *time) 从1970年1月1日到到现在的秒数,如果系统时间不存在,返回1
char *ctime(const time_t *time) 返回以:day month year hours:minutes:seconds year\n\0格式的时间字符串指针
struct tm *localtime(const time_t *time) 返回现在时间的tm结构体的指针
clock_t clock(void) 返回程序调用到现在的时间,1为不可用
char * asctime ( const struct tm * time) 返回time为名的结构体转换为的字符串指针,格式为:day month date hours:minutes:seconds year\n\0
struct tm *gmtime(const time_t *time) 返回tm结构体指针的UTC时间
time_t mktime(struct tm *time) 返回time结构提指针中与日历时间相等的时间
double difftime ( time_t time2, time_t time1 ) 比较1和2两个时间的差值
size_t strftime() 格式化时间

#include <stdarg.h>
#include <iostream>
#include <sstream>
#include <string>
#include <tchar.h> // cl.exe /D "_UNICODE" /D "UNICODE" /Ox /EHsc /W3 /WX- /FeDateSpan.exe dateSpan.cpp namespace SkDate
{
const int daysMonthly[] = { ,,,,,,,,,,, }; // 是否闰年
bool IsLeapyear(int year)
{
return ((year % == && year % != ) || year % == );
} // 某月的总天数
int DaysOfMonth(int year, int month)
{
int nCount = daysMonthly[month - ];
if (month == && IsLeapyear(year))
{
nCount += ;
}
return nCount;
} // 获取公历年初至某整月的天数
int DaysTillMonth(int year, int month)
{
int sumDays = ; for (int index = ; index < month - ; index++)
{
sumDays += daysMonthly[index];
if (IsLeapyear(year) && index == )
{
sumDays += ;
}
}
return sumDays;
} // 获取从公元元年1月1日至当前日期的总天数
int GetAllDaysTill(int year, int month, int day)
{
int i = ;
int nDays = day;
while (i < year)
{
nDays += IsLeapyear(i) ? : ;
i++;
}
nDays += DaysTillMonth(year, month);
return nDays;
} // 检查输入日期是否正确
bool IsValidDate(int year, int month, int day)
{
if (month < || month > || day < || day > SkDate::DaysOfMonth(year, month))
{
return false;
}
return true;
}
} using namespace std; wstring FormatWstring(const wchar_t * _Format, ...) {
wstring _str;
va_list marker = NULL;
va_start(marker, _Format); int num_of_chars = _vsctprintf(_Format, marker); if (num_of_chars > _str.capacity()) {
_str.resize(num_of_chars + );
} _vstprintf_s((wchar_t *)_str.c_str(), num_of_chars+, _Format, marker); va_end(marker);
_str.resize(num_of_chars); return _str;
} int _tmain(void)
{
int year1 = , month1 = , day1 = ;
int date[] = { };
// 设定缺省的中文环境,cout不显示千位上的逗号
wcout.imbue(locale("", std::locale::all ^ std::locale::numeric));
wcout << _T("☆请输入起始日期(输入格式yyyy-mm-dd): "); wchar_t chr;
wcin >> year1 >> chr >> month1 >> chr >> day1;
if (!SkDate::IsValidDate(year1, month1, day1))
{
wcout << _T("输入格式错误!") << endl;
return -;
} wcin.ignore(std::numeric_limits<std::streamsize>::max(), wcin.widen('\n'));
wcout << _T("★请输入终止日期(输入格式yyyy-mm-dd): ");
wstring strFmt;
getline(wcin, strFmt);
wstringstream strs(strFmt);
int nIndx = -;
while (getline(strs, strFmt, _T('-')))
{
date[++nIndx] = stoi(strFmt);
} if (nIndx != || !SkDate::IsValidDate(date[], date[nIndx-], date[nIndx]))
{
wcout << _T("输入格式错误!") << endl;
return -;
} wcout << FormatWstring(_T("\n%4d年%2d月%2d日 到 %4d年%2d月%2d日 间隔"), year1, month1, day1, date[], date[], date[]); int days1 = SkDate::GetAllDaysTill(year1, month1, day1);
int days2 = SkDate::GetAllDaysTill(date[], date[], date[]);
int sout = abs(days1 - days2);
wcout << sout << _T("天。") << endl;
return ;
}

https://stackoverflow.com/questions/342409/how-do-i-base64-encode-decode-in-c#

C++执行命令行指令并获取命令行执行后的输出结果
https://blog.csdn.net/VonSdite/article/details/81295056

1. popen(可获取命令行执行后的输出结果)
popen()可以执行shell命令,并读取此命令的返回值;  
popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程。可以通过这个管道执行标准输入输出操作。这个管道必须由pclose()函数关闭, 而不是fclose()函数(若使用fclose则会产生僵尸进程)。pclose()函数关闭标准I/O流,等待命令执行结束,然后返回shell的终止状态。如果shell不能被执行,则pclose()返回的终止状态与shell已执行exit一样。

函数原型
 FILE *popen(const char *command, const char *type); 
 int pclose(FILE *stream);

command参数
是一个指向以NULL结束的shell命令字符串的指针。这行命令将被传到bin/sh并使用-c标志,shell将执行这个命令。

type参数
只能是读或者写中的一种,得到的返回值(标准I/O流)也具有和type相应的只读或只写类型。
如果type是”r”则文件指针连接到command的标准输出;
如果type是”w”则文件指针连接到command的标准输入。

返回值
如果调用fork()或pipe()失败,或者不能分配内存将返回NULL,否则返回标准I/O流。
popen()没有为内存分配失败设置errno值。
如果调用fork()或pipe()时出现错误,errno被设为相应的错误类型。
如果type参数不合法,**errno将返回EINVA**L。
例:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h> void print_result(FILE *fp)
{
char buf[]; if(!fp)
{
return;
}
printf("\n>>>\n");
while(memset(buf, , sizeof(buf)), fgets(buf, sizeof(buf) - , fp) != ) {
printf("%s", buf);
}
printf("\n<<<\n");
} int main(void)
{
FILE *fp = NULL; while() {
fp = NULL;
fp = popen("ls", "r");
if(!fp) {
perror("popen");
exit(EXIT_FAILURE);
}
print_result(fp);
pclose(fp);
sleep();
}
}

2. 使用Windows API的管道(可获取命令行执行后的输出结果,功能比1强大)
使用匿名管道和CreateProcess函数实现不弹出黑框,获取命令行执行后输出结果。
使用CreateProcess可以设置命令行启动信息、 可以指定命令行执行的目录等等。

std::wstring Connection::ExeCmd(std::wstring pszCmd)
{
// 创建匿名管道
SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, TRUE};
HANDLE hRead, hWrite;
if (!CreatePipe(&hRead, &hWrite, &sa, ))
{
return TEXT(" ");
} // 设置命令行进程启动信息(以隐藏方式启动命令并定位其输出到hWrite
STARTUPINFO si = {sizeof(STARTUPINFO)};
GetStartupInfo(&si);
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;
si.hStdError = hWrite;
si.hStdOutput = hWrite; // 启动命令行
PROCESS_INFORMATION pi;
if (!CreateProcess(NULL, (LPWSTR)pszCmd.c_str(), NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi))
{
return TEXT("Cannot create process");
} // 立即关闭hWrite
CloseHandle(hWrite); // 读取命令行返回值
std::string strRetTmp;
char buff[] = {};
DWORD dwRead = ;
strRetTmp = buff;
while (ReadFile(hRead, buff, , &dwRead, NULL))
{
strRetTmp += buff;
}
CloseHandle(hRead); LPCSTR pszSrc = strRetTmp.c_str();
int nLen = MultiByteToWideChar(CP_ACP, , buff, -, NULL, );
if (nLen == )
return std::wstring(L""); wchar_t* pwszDst = new wchar_t[nLen];
if (!pwszDst)
return std::wstring(L""); MultiByteToWideChar(CP_ACP, , pszSrc, -, pwszDst, nLen);
std::wstring strRet(pwszDst);
delete[] pwszDst;
pwszDst = NULL; return strRet;
}

C++练习,计算间隔天数的更多相关文章

  1. Js 时间间隔计算(间隔天数)

    function GetDateDiff(startDate,endDate)  {      var startTime = new Date(Date.parse(startDate.replac ...

  2. php 计算两个日期的间隔天数

    使用php内部自带函数实现 1.使用DateTime::diff 实现计算 参考阅读>>PHP DateTime::diff() 上代码: <?php $start = " ...

  3. C语言计算日期间隔天数的经典算法解析

    #include <stdio.h> #include <stdlib.h> int day_diff(int year_start, int month_start, int ...

  4. C语言计算两个日期间隔天数

    在网上看到了一个C语言计算日期间隔的方法,咋一看很高深,仔细看更高神,很巧妙. 先直接代码吧 #include <stdio.h> #include <stdlib.h> in ...

  5. Java8 LocalDate计算两个日期的间隔天数

    Java8新增了java.time包,提供了很多新封装好的类,使我们可以摆脱原先使用java.util.Time以及java.util.Calendar带来的复杂. 其中LocalDate正是本文中使 ...

  6. MYSQL如何计算两个日期间隔天数

    如何透过MYSQL自带函数计算给定的两个日期的间隔天数   有两个途径可获得   1.利用TO_DAYS函数   select to_days(now()) - to_days('20120512') ...

  7. 李洪强漫谈iOS开发[C语言-041]-计算月份天数

    李洪强漫谈iOS开发[C语言-041]-计算月份天数 

  8. mysql计算连续天数,mysql连续登录天数,连续天数统计

    mysql计算连续天数,mysql连续登录天数,连续天数统计 >>>>>>>>>>>>>>>>>& ...

  9. Oracle计算连续天数,计算连续时间,Oracle连续天数统计

    Oracle计算连续天数,计算连续时间,Oracle连续天数统计 >>>>>>>>>>>>>>>>> ...

随机推荐

  1. poj1595 水题

    题意:输入n, 和c  统计1 - n 有多少个素数为cnt 若 2*c > cnt 则将素数全部输出 否则分支判断:  若cnt 为偶数,则从中心开始输出2*c 个  若cnt 为奇数,则从中 ...

  2. nuxt 头部引入js文件 第一次进入页面不加载js文件的解决方法

    head () { return { title: '', meta: [ { hid: 'description', name: 'description', content: '' } ], sc ...

  3. 关于JS的继承总结

    最近都在巩固JS的基础知识,今天组要看的是有关继承方面的,每次看都会加深自己的理解呢 1.借助构造函数实现继承 原理:在子类中改变父类this的指向 function Parent1() { this ...

  4. c++ 结构体,设置物品体积并输出物品属性

    #include <iostream> using namespace std; struct box { char maker[40]; float height; float widt ...

  5. (27)zabbix自定义图表Graph

    zabbix提供了一个自定义图表的功能,这不是废话么?呵呵~前面文章 讲到的<zabbix简易图表>只能显示单个item的数据图表.如果我们想显示多个信息到一个图表上,那必须使用zabbi ...

  6. Pycharm快捷键及Python常用转义符

    不管是windows.xshell或者pycharm,学会使用快捷键都会使学习工作达到事半功倍的效果.这篇博客收集了部分常用的pycharm快捷键,分享给大家,希望对大家有用. 1. 常用快捷键 Py ...

  7. log4j日志输出到文件的配置

    1.Maven的dependency 2.log4j.properties的配置 3.Junit的Test类 4.web.xml的配置(非必要) 5.spring的db.config的配置(非必要) ...

  8. web前端常用的封装方法

    1.放大镜 //页面加载完毕后执行 window.onload = function () { var oDemo = document.getElementById('demo'); var oMa ...

  9. The US in understimating Huawei, says founder Ren zhengfei

    Huawei Founder Ren Zhengfei has downplayed the impact of the US executive order that cripple Huawei' ...

  10. S3C6410串口平台设备注册流程分析

    1.mdesc->map_io() start_kernel -->setup_arch(&command_line); -->paging_init(mdesc); --& ...