如何使用C ++根据周代码而不是当前日期获取到期日期
How to get the expiration date based on week code not on current date using c++
如何获取基于周代码的项目的到期日期?每当我 运行 我制作的代码时,程序都会读取当前日期并忽略周代码。例如:
Week Code: 2138 (2021 week 38)
Shelf_life : 6 months
CTime weekcode = CTime::GetCurrentTime();
CTimeSpan shelf_no = CTimeSpan(atoi(view->m_pODBCPartsNo->m_shelf_life), 0, 0, 0);
CTime expiration_date = weekcode = shelf_no;
周码是日期码,例如2138,年2021(21)周38(38)。第38周为2021年9月19日至2021年9月25日左右
现在的问题是,我将如何获得基于周代码的到期日期?我还会使用“GetCurrentTime”吗?
下面是我将如何使用 Howard Hinnant's free, open-source, header-only date library:
#include "date/iso_week.h"
#include "date/date.h"
#include <chrono>
#include <iostream>
int
main()
{
using namespace date;
int weekcode = 2138;
int shelf_life = 6;
iso_week::year y{weekcode / 100 + 2000};
iso_week::weeknum wk(weekcode % 100);
auto prod_date = y/wk/iso_week::wed;
auto exp_date = floor<days>(sys_days{prod_date} + months{shelf_life});
std::cout << "Production date : " << prod_date << '\n';
std::cout << "Expiration date : " << exp_date << '\n';
}
这假设您正在使用 ISO week date as the definition of "week number", which is an internationally accepted standard. The program begins by simply decoding weekcode
into a year
and weeknum
. It then uses the iso_week
library 来创建带有此 year
和 weeknum
的生产日期。要完成此日期,必须提供 weekday
。我选择了星期三,因为这是 ISO 工作周的中间时间。
auto prod_date = y/wk/iso_week::wed;
然后可以通过简单地在该日期上加上 6 个月来计算到期日期。请注意,此添加是使用 完成的,因为产品老化是一个物理过程,不关心不同月份的长度不同。使用“平均月”长度就足够了。
要进行此时间顺序计算,必须先将生产日期转换为时间顺序,sys_days
。这只是自 Unix Time 纪元以来的天数。
auto exp_date = floor<days>(sys_days{prod_date} + months{shelf_life});
结果的精度高于天数,因为平均月持续时间不是天数的整数倍。因此必须将它截断回 days
的精度来创建日期,而不是 date-time.
以上程序打印出来:
Production date : 2021-W38-Wed
Expiration date : 2022-03-23
如何获取基于周代码的项目的到期日期?每当我 运行 我制作的代码时,程序都会读取当前日期并忽略周代码。例如:
Week Code: 2138 (2021 week 38)
Shelf_life : 6 months
CTime weekcode = CTime::GetCurrentTime();
CTimeSpan shelf_no = CTimeSpan(atoi(view->m_pODBCPartsNo->m_shelf_life), 0, 0, 0);
CTime expiration_date = weekcode = shelf_no;
周码是日期码,例如2138,年2021(21)周38(38)。第38周为2021年9月19日至2021年9月25日左右
现在的问题是,我将如何获得基于周代码的到期日期?我还会使用“GetCurrentTime”吗?
下面是我将如何使用 Howard Hinnant's free, open-source, header-only date library:
#include "date/iso_week.h"
#include "date/date.h"
#include <chrono>
#include <iostream>
int
main()
{
using namespace date;
int weekcode = 2138;
int shelf_life = 6;
iso_week::year y{weekcode / 100 + 2000};
iso_week::weeknum wk(weekcode % 100);
auto prod_date = y/wk/iso_week::wed;
auto exp_date = floor<days>(sys_days{prod_date} + months{shelf_life});
std::cout << "Production date : " << prod_date << '\n';
std::cout << "Expiration date : " << exp_date << '\n';
}
这假设您正在使用 ISO week date as the definition of "week number", which is an internationally accepted standard. The program begins by simply decoding weekcode
into a year
and weeknum
. It then uses the iso_week
library 来创建带有此 year
和 weeknum
的生产日期。要完成此日期,必须提供 weekday
。我选择了星期三,因为这是 ISO 工作周的中间时间。
auto prod_date = y/wk/iso_week::wed;
然后可以通过简单地在该日期上加上 6 个月来计算到期日期。请注意,此添加是使用
要进行此时间顺序计算,必须先将生产日期转换为时间顺序,sys_days
。这只是自 Unix Time 纪元以来的天数。
auto exp_date = floor<days>(sys_days{prod_date} + months{shelf_life});
结果的精度高于天数,因为平均月持续时间不是天数的整数倍。因此必须将它截断回 days
的精度来创建日期,而不是 date-time.
以上程序打印出来:
Production date : 2021-W38-Wed
Expiration date : 2022-03-23