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. The - Modcrab——使用贪心策略

    一.题目信息 The - Modcrab 简单翻译一下:Vova有生命值h1,每次攻击值为a1,每瓶药水恢复生命值c1;Modcrab有生命值h2,每次攻击值为a2.在每个关卡开始,Vova有两种选择 ...

  2. 优化SQL语句的方法

    首先,对于where语句的注意事项: 1.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where nu ...

  3. mac 上node.js环境的安装与测试【转】

    http://blog.csdn.net/baihuaxiu123/article/details/51868142 一 摘要 如何大家之前做过web服务器的人都知道,nginx+lua与现在流行的n ...

  4. HTML5基础知识习题 一

    1. HTML5 之前的 HTML 版本是什么? 答: HTML 4.01 2. HTML5 的正确 doctype 是? 答: <!DOCTYPE html> 3. 在 HTML5 中, ...

  5. VUE2中axios的使用方法

    一,安装 npm install axios 二,在http.js中引入 import axios from 'axios'; 三,定义http request 拦截器,添加数据请求公用信息 axio ...

  6. kvm虚拟化存储管理

    1. kvm虚拟化存储介绍 KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的.Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种型: Vol ...

  7. Shell脚本的条件测试与比较

    Shell脚本的条件测试与比较 一.shell脚本的条件测试 通常,在bash的各种条件结构和流程控制结构中都要进行各种测试,然后根据测试结构执行不同的操作,有时也会与if等条件语句相结合,来完成测试 ...

  8. node.js---对文件操作

    1. var fs=require('fs'); fs.open(path,flag,[mode],callback); path:要打开的文件路径 flags:要打开文件的方式 读/写 mode:设 ...

  9. perl学习之内置变量

    Perl内置特殊变量   一.正则表达式特殊变量:1.$n  :包含上次模式匹配的第n个子串2.$& :前一次成功模式匹配的字符串3.$`  :前次匹配成功的子串之前的内容4.$’ :前次匹配 ...

  10. Python日志(logging)模块,shelve,sys模块

    菜鸟学python第十七天 1.logging 模块 logging模块即日志记录模块 用途:用来记录日志 为什么要记录日志: 为了日后复查,提取有用信息 如何记录文件 直接打开文件,往里写东西 直接 ...