Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >两个日期之间的天数C++

两个日期之间的天数C++
EN

Stack Overflow用户
提问于 2013-01-08 15:53:05
回答 3查看 64.6K关注 0票数 22

我看到了C#,Java的例子,但是对于C++,我找不到解决方案来计算两个日期之间有多少天。

例如在2012-01-24和2013-01-08之间

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2013-01-08 21:20:14

将日期转换为整数,表示自一个纪元以来的天数,然后减去。在这个例子中,我选择了Rata Die,可以在[http://mysite.verizon.net/aesir\_research/date/rata.htm](http://mysite.verizon.net/aesir_research/date/rata.htm)上找到算法的解释。

代码语言:javascript
运行
AI代码解释
复制
int
rdn(int y, int m, int d) { /* Rata Die day one is 0001-01-01 */
    if (m < 3)
        y--, m += 12;
    return 365*y + y/4 - y/100 + y/400 + (153*m - 457)/5 + d - 306;
}

int days = rdn(2013, 1, 8) - rdn(2012, 1, 24);
票数 18
EN

Stack Overflow用户

发布于 2015-08-10 19:54:11

一个老问题的新答案:

使用此C++11/C++14 header-only date library,您现在可以编写:

代码语言:javascript
运行
AI代码解释
复制
#include "date.h"
#include <iostream>

int
main()
{
    using namespace date;
    using namespace std;
    auto x = 2012_y/1/24;
    auto y = 2013_y/1/8;
    cout << x << '\n';
    cout << y << '\n';
    cout << "difference = " << (sys_days{y} - sys_days{x}).count() << " days\n";
}

以下哪项输出:

代码语言:javascript
运行
AI代码解释
复制
2012-01-24
2013-01-08
difference = 350 days

如果你不想依赖这个库,你可以编写自己的库,使用上面的date库使用的相同的日期算法。它们可以在本文中找到:chrono-Compatible Low-Level Date Algorithms。这篇文章中的算法在这个例子中是这样的:

代码语言:javascript
运行
AI代码解释
复制
// Returns number of days since civil 1970-01-01.  Negative values indicate
//    days prior to 1970-01-01.
// Preconditions:  y-m-d represents a date in the civil (Gregorian) calendar
//                 m is in [1, 12]
//                 d is in [1, last_day_of_month(y, m)]
//                 y is "approximately" in
//                   [numeric_limits<Int>::min()/366, numeric_limits<Int>::max()/366]
//                 Exact range of validity is:
//                 [civil_from_days(numeric_limits<Int>::min()),
//                  civil_from_days(numeric_limits<Int>::max()-719468)]
template <class Int>
constexpr
Int
days_from_civil(Int y, unsigned m, unsigned d) noexcept
{
    static_assert(std::numeric_limits<unsigned>::digits >= 18,
             "This algorithm has not been ported to a 16 bit unsigned integer");
    static_assert(std::numeric_limits<Int>::digits >= 20,
             "This algorithm has not been ported to a 16 bit signed integer");
    y -= m <= 2;
    const Int era = (y >= 0 ? y : y-399) / 400;
    const unsigned yoe = static_cast<unsigned>(y - era * 400);      // [0, 399]
    const unsigned doy = (153*(m + (m > 2 ? -3 : 9)) + 2)/5 + d-1;  // [0, 365]
    const unsigned doe = yoe * 365 + yoe/4 - yoe/100 + doy;         // [0, 146096]
    return era * 146097 + static_cast<Int>(doe) - 719468;
}

有关此算法的工作原理、单元测试及其有效性范围的详细信息,请参阅chrono-Compatible Low-Level Date Algorithms

这个算法模拟了proleptic Gregorian calendar,它无限地向前和向后扩展了公历。要对其他日历(如儒略历)建模,您将需要其他算法such as the ones shown here。一旦您设置了其他日历,并将其同步到相同的连续纪元(这些算法使用1970-01-01公历,这也是Unix time纪元),您不仅可以轻松地计算任意两个日期之间的天数,而且还可以计算您建模的任意两个日历之间的天数。

这使您不必在从Julian转换到Gregorian的日期中硬编码。您只需要知道您的输入数据引用的是哪个日历。

有时,历史文档中可能不明确的日期会使用Old Style / New Style进行注释,以分别表示儒略历或公历。

如果您还关心日期的时间,此same date library<chrono>库无缝集成以使用hoursminutessecondsmillisecondsmicrosecondsnanoseconds,并与system_clock::now()无缝集成以获取当前日期和时间。

如果您关心时区,可以在date library之上编写一个额外的(单独的) timezone library,以使用IANA timezone database处理时区。如果需要,timezone library还为包含leap seconds的计算提供了一种工具。

票数 16
EN

Stack Overflow用户

发布于 2013-01-08 15:55:45

您可以尝试使用boost date_time

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14218894

复制
相关文章
Appium安卓和iOS开发环境安装
Appium是移动端的自动化测试工具,类似于Selenium,利用它可以驱动Android,iOS等设备完成自动化测试,比如模拟点击,滑动,输入等操作....
py3study
2020/01/19
3.6K0
安卓和 ios滚动事件的差异
document.documentElement.scroll 仅在 ios 有效,
蓓蕾心晴
2022/11/21
9700
和安卓和ios的webview的数据交互
第一步是必写的 function setupWebViewJavascriptBridge(callback) { if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); } if (window.WVJBCallbacks) {
河湾欢儿
2019/07/24
1.2K0
支持安卓和ios,手机app+1
今天分享个扫描神器布丁扫描 ,支持安卓和ios,免费无广,在公众号后台回复 扫描 获取下载地址。
苏生不惑
2023/02/06
6460
安卓和ios之间文件互传_安卓转移到iphone12
如果之前是安卓用户,在购买 iphone 12 新款手机之后,如何从安卓转移数据到 ios?可以通过苹果官方提供的“转移到 ios”应用,将安卓手机中的内容进行转移,感兴趣的朋友快来看看吧!
全栈程序员站长
2022/11/04
1.7K0
H5如何与IOS和安卓进行交互
写在前面 很久没更新了,真的是没时间,周末要做兼职,工作日要加班赶项目,筋疲力尽了,今天稍微好点,更新一下吧,最近用的一些东西! 问题描述 我们开发一款软件,其中涉及到一些支付的问题,这边担心IOS的App无法通过AppleStore的审核,所以中间支付的模块使用H5进行内嵌,也就是直接使用webview进行调起H5完成对应的功能, 代码 /** * @FUNCTION memberRecharge * @params NaviType是否需要显示导航栏 1 不显示 2 显示 3 会员充值(
何处锦绣不灰堆
2021/06/29
2K0
前端H5与安卓和ios之间通信
在一些app场景中,经常看到app里面嵌套H5页面, 安卓和ios提供一个空壳子,方法两者互相调用。上一周就是写H5页面让安卓和ios调用使用,中间传参,接受参数。通过 window.wx 对象调用一些原生 app 的功能。这个H5页面,我用的是vue来写的。用到了vue全家桶。
小周sir
2019/09/23
2.4K0
前端H5与安卓和ios之间通信
安卓抓取直播源_港澳台rtmp直播源
很多时候你们在pc端看电视直播,都会出现直播源失效的情况,这样就可以用到电视直播源抓取工具箱,帮助你们自动抓取最新的直播源,让你们能够随时的观看自己喜欢的电视内容。
全栈程序员站长
2022/11/01
3.9K0
安卓抓取直播源_港澳台rtmp直播源
看书必备!安卓+iOS 看小说神器!!
你用手机看小说吗?网络小说。 听说过唐家三少吗?天蚕土豆?我吃西红柿? 如果你的回答是“是”,那你一定需要一款可以调背景,字体,滑动方式的好用免费的小说客户端。 比如,看书神器?可以更换追书源的那种
课代表
2018/06/29
2.2K0
物联网系统时代:iOS、安卓拜拜?
随着智能汽车、智能家居、智慧交通等智慧场景的应用落地,智慧化生活场景正在成为现实。在技术应用层面,这些智慧场景的实现,都需要操作系统的支持。这种情况下,以物联网技术为核心的IoT操作系统地位愈加凸显。
刘旷
2020/12/03
1.4K0
物联网系统时代:iOS、安卓拜拜?
看书必备!安卓+iOS 看小说神器!!
看网络小说的小伙伴们应该都知道笔趣阁这三个字,最早的笔趣阁是哪一个,什么时候被ban已经不可考,但这个三个字已经成为小说界的一个大IP,百度出来一大串,什么笔趣阁阅读,新笔趣阁,没有什么真的假的,就看
课代表
2018/06/29
2.2K0
看书必备!安卓+iOS 看小说神器!!
iOS端的看书APP下架了一个又一个,真是不容易,安卓端也是良莠不齐,名气最大的追书神器也转向正版,当然,破解版除外。
课代表
2018/09/27
3.9K0
看书必备!安卓+iOS 看小说神器!!
uniapp安卓-IOS打开pdf文件组件
做的比较简陋,将就用哈,自己优化也许 调用: this.$refs.openPdf.preview(item.url) 使用: <!-- pdf预览start --> <previewPdf ref="openPdf"></previewPdf> <!-- pdf预览end --> 引用: import previewPdf from '@/components/preview-pdf/preview-pdf.vue' //pdf预览 <template> <view> </view
〆 千寻、
2020/03/16
3.7K4
uniapp安卓-IOS打开pdf文件组件
IOS,安卓,Windows和塞班,你最喜欢哪个?为什么?
从事软件开发多年,主要用C/C++,java三种编程语言开发,IOS,安卓,windows,塞班四个系统除了IOS没怎么玩过,其余三种系统都做过对应的开发,其中安卓系统玩的时间最长,研究过中间层的framework框架,应用级开发也弄过两年,从技术角度上衡量虽然windows系统不是开源的,但受众如此之多经常遭受病毒的侵袭但通过打补丁的方式来避免,还不耽误整体的使用,就冲着这点还是感觉windows的框架兼容性还是非常强,而且现在windows系统在PC端还是稳稳的霸主地位,虽然linux系统在早期对于微软产生过威胁,但整体来讲冲击不大。
程序员互动联盟
2019/07/04
9510
IOS,安卓,Windows和塞班,你最喜欢哪个?为什么?
安卓webview不能使用location.href跳转
安卓webview在某些版本使用location.href时会闪退。 主要问题是 通过window.location.href来重定向的,安卓不会正确触发shouldOverrideUrlLoading。 这个时候需要重写shouldOverrideUrlLoading webView.setWebViewClient( new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading( WebView view, Stri
雪碧君
2023/02/13
2.5K0
如何开发适配安卓和iOS双平台的React Native应用
众所周知用React Native是可以开发跨平台的Android和iOS App。我们可以用React Native开发Android应用也可以开发iOS应用,那么如何让我们开发的React Native应用适配Android和iOS双平台呢? 在这篇文章中我将从布局、组件选择、图片、性能问题、Bugs等几个方面来谈一谈Android和iOS的适配问题。 布局 React Native在布局方面采用的是Flexbox,为了能让代码有更高复用性以及兼容性,我们可以将Android和iOS的样式尽量保持一致
IT架构圈
2018/05/31
3.5K0
逐渐安卓化会是ios的归宿吗
近日的苹果发布会虽然没等到iphone12,但ios14还是如期而至了。似乎是预示着这个版本的重大变革,ios14对新系统的定义就是“重塑iphone体验”。
TestOps
2022/04/07
1.4K0
逐渐安卓化会是ios的归宿吗
安卓设备数据转移到ios设备
1、首先在安卓设备上在https://support.apple.com/zh-cn/HT205042下载“转移到 iOS”应用,然后安装并轻点“继续”。阅读显示的条款和条件。轻点“同意”以继续,然后轻点“查找代码”屏幕右上角的“下一步”。
全栈程序员站长
2022/10/02
1.4K0
安卓Task和Back Stack
用户1172465
2018/01/08
1.1K0
安卓Task和Back Stack
WebRTC, IOS 和直播
主讲人首先介绍了他自己,Colin Biggin 从 2008 年开始作为 iOS 程序员一直在 AppStore 上开发应用程序,在 AppStore 上开发超过 70 个应用程序。2014 年入职 Stage TEN,与 YouTube、Google、TVO、Khan Academy 均有合作。
用户1324186
2022/05/24
1.7K0
WebRTC, IOS 和直播

相似问题

安装lamp 环境时权限问题?

059

lamp环境下php出错时提示500?

2755

lamp环境安装好后不能路由到phpmyadmin,显示403?

2367

怎么卸载购买云服务器预安装的lamp环境?

1261

ubuntu lamp 问题?

0148
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档