gpt4 book ai didi

c++ - 如何使用 date.h 在 C++ 中获取当前星期几?

转载 作者:搜寻专家 更新时间:2023-10-30 23:51:09 24 4
gpt4 key购买 nike

我正在使用 C++ 14 并尝试获取星期几。经过一番阅读后,我正在使用 date.h Howard E. Hinnant 着。

但是我很难找到一周中的某一天(编码为 0 到 6)。

像这样打印出 Thu:

 int main(void)
{
date::sys_days t;
weekday wd{t};
cout << wd << '\n';
}

此站点上有关使用 chrono 获取当前星期几的许多答案。

如何使用 date.h 根据程序运行时间将当前工作日打印为 0-6 范围内的日期?

例如,如果我今天(星期二)运行该程序,我期望值为 2。

如有任何建议,我们将不胜感激。


只是为了清楚我想要实现的目标,Java 中的一些类似的东西:

Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Europe/London"));
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);

最佳答案

您的代码的问题是 t 没有被初始化为任何有趣的东西。你只需要将它设置为“现在”。不过有一个小问题:now() 返回一种不同类型的时间点,它不能自动转换为 date::sys_days 值。

因此,这里是使您的程序正常运行的最小更改:

#include "date.h"
#include <iostream>
#include <cstdint>

int main()
{
auto now = std::chrono::system_clock::now();
date::sys_days t { std::chrono::time_point_cast<date::days>(now) };
date::weekday wd{t};
std::cout << wd << '\n';
}

编辑:现在让我们做更多的事情,感谢@HowardHinnant 提供的信息性评论。

使用更有意义的名字

main() 的代码替换为

auto now = std::chrono::system_clock::now();
date::sys_days now_in_days { std::chrono::time_point_cast<date::days>(now) };
date::weekday weekday {now_in_days};
std::cout << weekday << '\n';

以数字形式获取工作日

你说你想得到星期几的数字。好吧,我们可以做到:

auto weekday_index = weekday.c_encoding();

类型将是unsigned,值将在 0...6 范围内

获取您所在时区的工作日

到目前为止,你的代码和我的代码都是 UTC。这作为默认设置很好,但在工作日可能会给您带来惊喜。我们可以使用 zoned_time 并写:

auto now = std::chrono::system_clock::now();
auto now_local = zoned_time{current_zone(), now}.get_local_time();
date::sys_days now_local_in_days { std::chrono::time_point_cast<date::days>(now_local) };
date::weekday weekday {now_local_in_days};
auto weekday_index = weekday.c_encoding();

获取纪元(1970 年)之前的日期

这非常烦人,但是 time_point_cast() 可能并不总是如您所愿!霍华德说,在 1970 年之前的几天里,我们需要改用 floor():

date::sys_days now_local_in_days { std::chrono::floor<date::days>(now_local) };

最终程序

#include "date.h"
#include <iostream>
#include <cstdint>

int main()
{
auto now = std::chrono::system_clock::now();
auto now_local = zoned_time{current_zone(), now}.get_local_time();
date::sys_days now_local_in_days { std::chrono::floor<date::days>(now_local) };
date::weekday weekday {now_local_in_days};
auto weekday_index = weekday.c_encoding();
std::cout << weekday_index << '\n';
}

如果今天是星期二,结果输出应该是 2

关于c++ - 如何使用 date.h 在 C++ 中获取当前星期几?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57569940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com