小编Val*_*84 的帖子

std :: chrono :: duration_cast - GCC实现是否被窃听?

我想我在std :: chrono :: duration_cast的GCC实现中发现了一个错误.有谁可以请证实我这个?

测试代码:

using Ticks = std::chrono::duration<long long, std::ratio_multiply<std::chrono::nanoseconds::period, std::ratio<100>>>;

using dur = typename std::chrono::system_clock::duration;

int main() 
{

    std::chrono::time_point<std::chrono::system_clock> earliest {std::chrono::duration_cast<dur>(
    std::chrono::time_point<std::chrono::system_clock, Ticks>::max().time_since_epoch())};

    auto ticks = std::chrono::time_point<std::chrono::system_clock, Ticks>::max().time_since_epoch().count();
    std::cout << "Ticks: " << ticks << "\n";
    std::cout << sizeof(earliest.time_since_epoch().count()) << "\n";
    std::cout << "Microseconds: " << earliest.time_since_epoch().count() << "\n";

    std::time_t t = std::chrono::system_clock::to_time_t(earliest);
    std::cout << "earliest:\n" << std::ctime(&t);
}
Run Code Online (Sandbox Code Playgroud)

clang 3.8的输出是:

Ticks: 9223372036854775807
8
Microseconds: 922337203685477580
earliest:
Sun Sep 14 02:48:05 31197
Run Code Online (Sandbox Code Playgroud)

GCC 7.1的输出是:

Ticks: 9223372036854775807
8 …
Run Code Online (Sandbox Code Playgroud)

c++ gcc std c++-chrono

6
推荐指数
1
解决办法
341
查看次数

C++ 使用 std::get_time 解析 YYMMDD ISO 8601 日期字符串给出了意外结果?

我正在尝试解析格式为 的日期YYMMDD。作为测试,我尝试了以下代码:

#include <iostream>
#include <sstream>
#include <locale>
#include <iomanip>

int main(){
    std::tm t = {};
    std::istringstream ss("191203");
    ss >> std::get_time(&t, "%y%m%d");
    if (ss.fail()){ 
        std::cout << "Parse failed\n";
    } else {
        std::cout << std::put_time(&t, "%c") << '\n';
    }
}
Run Code Online (Sandbox Code Playgroud)

使用 Coliru、GCC 6.1 (C++17) 进行测试,输出为:

Sun Mar  0 00:00:00 1912
Run Code Online (Sandbox Code Playgroud)

我所期望的是:

Mon Dec 3 00:00:00 2019
Run Code Online (Sandbox Code Playgroud)

格式字符串有问题吗?

c++ date-parsing

5
推荐指数
1
解决办法
2820
查看次数

标签 统计

c++ ×2

c++-chrono ×1

date-parsing ×1

gcc ×1

std ×1