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() 格式化时间

  1. #include <stdarg.h>
  2. #include <iostream>
  3. #include <sstream>
  4. #include <string>
  5. #include <tchar.h>
  6.  
  7. // cl.exe /D "_UNICODE" /D "UNICODE" /Ox /EHsc /W3 /WX- /FeDateSpan.exe dateSpan.cpp
  8.  
  9. namespace SkDate
  10. {
  11. const int daysMonthly[] = { ,,,,,,,,,,, };
  12.  
  13. // 是否闰年
  14. bool IsLeapyear(int year)
  15. {
  16. return ((year % == && year % != ) || year % == );
  17. }
  18.  
  19. // 某月的总天数
  20. int DaysOfMonth(int year, int month)
  21. {
  22. int nCount = daysMonthly[month - ];
  23. if (month == && IsLeapyear(year))
  24. {
  25. nCount += ;
  26. }
  27. return nCount;
  28. }
  29.  
  30. // 获取公历年初至某整月的天数
  31. int DaysTillMonth(int year, int month)
  32. {
  33. int sumDays = ;
  34.  
  35. for (int index = ; index < month - ; index++)
  36. {
  37. sumDays += daysMonthly[index];
  38. if (IsLeapyear(year) && index == )
  39. {
  40. sumDays += ;
  41. }
  42. }
  43. return sumDays;
  44. }
  45.  
  46. // 获取从公元元年1月1日至当前日期的总天数
  47. int GetAllDaysTill(int year, int month, int day)
  48. {
  49. int i = ;
  50. int nDays = day;
  51. while (i < year)
  52. {
  53. nDays += IsLeapyear(i) ? : ;
  54. i++;
  55. }
  56. nDays += DaysTillMonth(year, month);
  57. return nDays;
  58. }
  59.  
  60. // 检查输入日期是否正确
  61. bool IsValidDate(int year, int month, int day)
  62. {
  63. if (month < || month > || day < || day > SkDate::DaysOfMonth(year, month))
  64. {
  65. return false;
  66. }
  67. return true;
  68. }
  69. }
  70.  
  71. using namespace std;
  72.  
  73. wstring FormatWstring(const wchar_t * _Format, ...) {
  74. wstring _str;
  75. va_list marker = NULL;
  76. va_start(marker, _Format);
  77.  
  78. int num_of_chars = _vsctprintf(_Format, marker);
  79.  
  80. if (num_of_chars > _str.capacity()) {
  81. _str.resize(num_of_chars + );
  82. }
  83.  
  84. _vstprintf_s((wchar_t *)_str.c_str(), num_of_chars+, _Format, marker);
  85.  
  86. va_end(marker);
  87. _str.resize(num_of_chars);
  88.  
  89. return _str;
  90. }
  91.  
  92. int _tmain(void)
  93. {
  94. int year1 = , month1 = , day1 = ;
  95. int date[] = { };
  96. // 设定缺省的中文环境,cout不显示千位上的逗号
  97. wcout.imbue(locale("", std::locale::all ^ std::locale::numeric));
  98. wcout << _T("☆请输入起始日期(输入格式yyyy-mm-dd): ");
  99.  
  100. wchar_t chr;
  101. wcin >> year1 >> chr >> month1 >> chr >> day1;
  102. if (!SkDate::IsValidDate(year1, month1, day1))
  103. {
  104. wcout << _T("输入格式错误!") << endl;
  105. return -;
  106. }
  107.  
  108. wcin.ignore(std::numeric_limits<std::streamsize>::max(), wcin.widen('\n'));
  109. wcout << _T("★请输入终止日期(输入格式yyyy-mm-dd): ");
  110. wstring strFmt;
  111. getline(wcin, strFmt);
  112. wstringstream strs(strFmt);
  113. int nIndx = -;
  114. while (getline(strs, strFmt, _T('-')))
  115. {
  116. date[++nIndx] = stoi(strFmt);
  117. }
  118.  
  119. if (nIndx != || !SkDate::IsValidDate(date[], date[nIndx-], date[nIndx]))
  120. {
  121. wcout << _T("输入格式错误!") << endl;
  122. return -;
  123. }
  124.  
  125. wcout << FormatWstring(_T("\n%4d年%2d月%2d日 到 %4d年%2d月%2d日 间隔"), year1, month1, day1, date[], date[], date[]);
  126.  
  127. int days1 = SkDate::GetAllDaysTill(year1, month1, day1);
  128. int days2 = SkDate::GetAllDaysTill(date[], date[], date[]);
  129. int sout = abs(days1 - days2);
  130. wcout << sout << _T("天。") << endl;
  131. return ;
  132. }

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。
例:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <string.h>
  5.  
  6. void print_result(FILE *fp)
  7. {
  8. char buf[];
  9.  
  10. if(!fp)
  11. {
  12. return;
  13. }
  14. printf("\n>>>\n");
  15. while(memset(buf, , sizeof(buf)), fgets(buf, sizeof(buf) - , fp) != ) {
  16. printf("%s", buf);
  17. }
  18. printf("\n<<<\n");
  19. }
  20.  
  21. int main(void)
  22. {
  23. FILE *fp = NULL;
  24.  
  25. while() {
  26. fp = NULL;
  27. fp = popen("ls", "r");
  28. if(!fp) {
  29. perror("popen");
  30. exit(EXIT_FAILURE);
  31. }
  32. print_result(fp);
  33. pclose(fp);
  34. sleep();
  35. }
  36. }

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

  1. std::wstring Connection::ExeCmd(std::wstring pszCmd)
  2. {
  3. // 创建匿名管道
  4. SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, TRUE};
  5. HANDLE hRead, hWrite;
  6. if (!CreatePipe(&hRead, &hWrite, &sa, ))
  7. {
  8. return TEXT(" ");
  9. }
  10.  
  11. // 设置命令行进程启动信息(以隐藏方式启动命令并定位其输出到hWrite
  12. STARTUPINFO si = {sizeof(STARTUPINFO)};
  13. GetStartupInfo(&si);
  14. si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
  15. si.wShowWindow = SW_HIDE;
  16. si.hStdError = hWrite;
  17. si.hStdOutput = hWrite;
  18.  
  19. // 启动命令行
  20. PROCESS_INFORMATION pi;
  21. if (!CreateProcess(NULL, (LPWSTR)pszCmd.c_str(), NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi))
  22. {
  23. return TEXT("Cannot create process");
  24. }
  25.  
  26. // 立即关闭hWrite
  27. CloseHandle(hWrite);
  28.  
  29. // 读取命令行返回值
  30. std::string strRetTmp;
  31. char buff[] = {};
  32. DWORD dwRead = ;
  33. strRetTmp = buff;
  34. while (ReadFile(hRead, buff, , &dwRead, NULL))
  35. {
  36. strRetTmp += buff;
  37. }
  38. CloseHandle(hRead);
  39.  
  40. LPCSTR pszSrc = strRetTmp.c_str();
  41. int nLen = MultiByteToWideChar(CP_ACP, , buff, -, NULL, );
  42. if (nLen == )
  43. return std::wstring(L"");
  44.  
  45. wchar_t* pwszDst = new wchar_t[nLen];
  46. if (!pwszDst)
  47. return std::wstring(L"");
  48.  
  49. MultiByteToWideChar(CP_ACP, , pszSrc, -, pwszDst, nLen);
  50. std::wstring strRet(pwszDst);
  51. delete[] pwszDst;
  52. pwszDst = NULL;
  53.  
  54. return strRet;
  55. }

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. Tensorflow_入门学习_1

    1.0 TensorFlow graphs Tensorflow是基于graph based computation: 如: a=(b+c)∗(c+2) 可分解为 d=b+c e=c+2 a=d∗e ...

  2. 使用vue做移动端瀑布流分页

    讲到瀑布流分页有一个方法一定是要用到的 pullToRefresh() 这个也没什么好解释的,想了解的可以去百度一下 下面上代码 <div id="main" class=& ...

  3. 什么是Java内存模型中的happens-before

    Java内存模型JMM Java内存模型(即Java Memory Model , 简称JMM),本身是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序个各个变量(包括实 ...

  4. fckeditor的实例

                            第一步:去官网下载,删除多余的包 删除所有”_”开头的文件和文件夹   删除FCKeditor的目录下:   fckeditor.afp fckedit ...

  5. https 调用验证失败 peer not authenticated

    https 调用验证失败 peer not authenticated 报错日志: Caused by: javax.net.ssl.SSLPeerUnverifiedException: peer ...

  6. path.join()与path.resolve()区别

    1.path.resolve([...paths]) path.resolve() 方法会把一个路径或路径片段的序列解析为一个绝对路径. 给定的路径的序列是从右往左被处理的,后面每个 path 被依次 ...

  7. laravel中的路由

    相信玩过laravel框架的小伙伴们,都知道它路由的强大之处 今天我想给大家分析下这个 首先 要找到配置路由的位置 routes这个目录下,我们找到web.php文件 里面可以看到现成的一个路由 Ro ...

  8. selenium.common.exceptions.WebDriverException: Message: u'unknown error: cannot get automation extension\nfrom unknown error: page could not be found: chrome-extension://aapnijgdinlhnhlmodcfapnahmbfeb

    Python2.7 selenium3.4.1在使用chrome driver时报错:selenium.common.exceptions.WebDriverException: Message: u ...

  9. Scrapy爬取多层级网页内容的方式

    # -*- coding: utf-8 -*- import scrapy from Avv.items import AvvItem class AvSpider(scrapy.Spider): n ...

  10. 数据结构( Pyhon 语言描述 ) — —第9章:列表

    概念 列表是一个线性的集合,允许用户在任意位置插入.删除.访问和替换元素 使用列表 基于索引的操作 基本操作 数组与列表的区别 数组是一种具体的数据结构,拥有基于单个的物理内存块的一种特定的,不变的实 ...