V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
keximing250
V2EX  ›  C

c++ 如何获取系统时间的前两个星期的时间

  •  
  •   keximing250 · 2018-03-13 11:34:12 +08:00 · 3041 次点击
    这是一个创建于 2476 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1.感觉挺复杂的啊 ,还要考虑闰年和每个月份的天数不同,

    2.不想写了,烧脑袋,想做个伸手党~大家有现成的例子么~~

    16 条回复    2018-03-14 09:31:26 +08:00
    zyqf
        1
    zyqf  
       2018-03-13 11:38:04 +08:00 via Android
    用时间戳做减法
    keximing250
        2
    keximing250  
    OP
       2018-03-13 11:39:44 +08:00
    @zyqf 不懂,可以具体点么~
    Rufeer
        3
    Rufeer  
       2018-03-13 11:43:55 +08:00 via iPhone
    自己写也就大一 c 语言的难度吧。。 可以换成时间戳 减去两星期 再换回来
    nealwx
        4
    nealwx  
       2018-03-13 11:54:30 +08:00
    1. time 获取当前时间
    2. 两个星期经过的描述数
    3. 用转换 localtime
    4. 再用 strftime 转换一下
    youxiachai
        5
    youxiachai  
       2018-03-13 11:55:22 +08:00
    我很好奇...c++ 没有日期操作库?
    alqaz
        6
    alqaz  
       2018-03-13 11:56:52 +08:00 via Android
    boost ptime
    MeteorCat
        8
    MeteorCat  
       2018-03-13 12:50:51 +08:00 via Android
    获取时间戳,减去两周时间戳,如果是需要获取每周起始点,如星期一就多一步时间筛选操作,楼上给了很多例子了;对 C++来说,我感觉中文资料基本上很贫乏,需要自己去 bing 或者谷歌查询
    keximing250
        9
    keximing250  
    OP
       2018-03-13 12:57:35 +08:00
    @nealwx 懂了~!
    Tyanboot
        10
    Tyanboot  
       2018-03-13 13:24:54 +08:00
    #include <chrono>

    typedef std::chrono::duration<int, std::ratio<3600 * 24 * 7>> weeks;

    int main()
    {
    auto now = std::chrono::system_clock::now();

    auto two_weeks_ago = now - weeks(2);
    // decltype(tt) == time_t
    auto tt = std::chrono::system_clock::to_time_t(two_weeks_ago);
    }

    这样就行了. c++11 提供了方便的 chrono 简化了时间的一些操作.
    keximing250
        11
    keximing250  
    OP
       2018-03-13 13:42:43 +08:00
    @Tyanboot 谢鞋了,以后用这个,这古董系统 不敢用 C++11 还是用时间戳了~
    alqaz
        12
    alqaz  
       2018-03-13 15:42:54 +08:00
    boost date 提供了类似的操作
    日期
    using namespace boost::gregorian;
    date d = day_clock::local_day();
    weeks w(-2);
    d -= w;
    这个不需要 c++11
    YMB
        13
    YMB  
       2018-03-13 17:40:00 +08:00
    如果实在不行的话,用其他语言挂个 API 提供服务,这个适合其他设计。
    但是 c++操作时间,可以找下库,c 语言应该有一些类似 pip、composer 之类的管理工具,没有的话应该有类似的网站。
    qf19910623
        14
    qf19910623  
       2018-03-13 18:52:34 +08:00
    @keximing250 无论如何,两个星期的时长是固定的,把当前时间戳减去这个时长,得到的时间戳再格式化一下就可以
    HaoyangWei
        15
    HaoyangWei  
       2018-03-13 19:01:17 +08:00
    记得 nginx 源码中有一段将时间戳转年月日时分秒的算法,比较有趣
    可以把当前时间戳-2*7*86400 丢到这个算法里面拿到日期
    keximing250
        16
    keximing250  
    OP
       2018-03-14 09:31:26 +08:00
    @qf19910623 嗯 就用了这个方法
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   910 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 22:27 · PVG 06:27 · LAX 14:27 · JFK 17:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.