C++ 从整数中提取日期部分

C++ 从整数中提取日期部分,c++,date,C++,Date,我在任何地方都找不到这个,但它对我很有用,所以我想我应该把它贴出来 给定日期的整数ISO表示形式,提取年/月/日 为什么我需要这个?因为我们有使用这种int表示的库,并且转换为boost::gregorian_date会导致性能问题。到处以int形式存储是一种更小的结构,而且似乎更快(在我们的特殊情况下) 希望有人会发现它有用。我认为没有比这更有效的方法了(也许使用scanf?) 编辑 iso日期表示为20131204。 问题是“如何以最有效的方式从这个整数表示中提取年/月/日部分?” 用例:

我在任何地方都找不到这个,但它对我很有用,所以我想我应该把它贴出来

给定日期的整数ISO表示形式,提取年/月/日

为什么我需要这个?因为我们有使用这种int表示的库,并且转换为boost::gregorian_date会导致性能问题。到处以int形式存储是一种更小的结构,而且似乎更快(在我们的特殊情况下)

希望有人会发现它有用。我认为没有比这更有效的方法了(也许使用scanf?)

编辑 iso日期表示为20131204。 问题是“如何以最有效的方式从这个整数表示中提取年/月/日部分?”

用例:
如果代码中只需要日级别的分辨率,而boost::gregorian或struct_tm在空间和时间上效率低下

您能否展示一个
iso_日期
整数的示例?一个表示日期的方案/time@AswinMurugesh:20131204(代表2013年12月4日)多年来,我们一直使用这种精确的日期格式,我们的算法和你发布的代码差不多一样。优化它的唯一方法是减少除法的数量(但这会增加操作的总数),如果人们不把这件事搁置起来,我会在回答中发布这一点,因为它带有破折号:2013-12-04.P.S。如果你真的非常关心速度,你会把它存储为一个位域。年是7位(纪元1980),月是4位,日是5位。适用于
uint16\u t
,绝对不需要乘法或除法进行编码或解码。顺便提一句
void iso_date_to_parts(const int iso_date) {
    const int year = date / 10000;
    const int month = (date / 100) % 100;
    const int day = date % 100;
}