如何在C++中从tm对象中获取星期几
How to get the day of the week from a tm object in C++?
我正在尝试编写一个程序,该程序解析表示日期格式为YYYYMMDD的字符串(使用strptime()
),并以dayOfWeek、Month Day、Year的形式打印它(使用put_time()
)。到目前为止,我拥有的是:
#include <iostream>
#include <sstream>
#include <ctime>
#include <iomanip>
using namespace std;
int main() {
struct tm tm;
string s("20131224");
if (strptime(s.c_str(), "%Y%m%e", &tm)) {
cout << put_time(&tm, "%A, %B %e, %Y") << endl;
}
}
问题是,无论日期如何,一周中的哪一天都是周日。
如果只给定一年、一个月和一天,则strptime()
不填充星期几信息,而put_time()
也不填充此信息,这似乎是一个问题。
根据strftime()
的文档,"如果提供足够的信息,tm结构中缺失的字段可以由strftime()
填充。"我还没有找到关于put_time()
(strftime()
似乎是基于它)的相同信息,所以我可能对该函数期望过高。
给定年份、月份和日期,strptime()
能否在输入时自动填写星期几(tm_wday
)?或者put_time()
是否可以在输出时自动填充此信息?如果没有,是否有其他方法将此信息添加到tm
对象
这里有一种方法,不使用C API,而是使用C++11/14<chrono>
设施和这个免费的、开源的、仅头程序库。
#include "date.h"
#include <iostream>
#include <sstream>
using namespace std;
int main() {
istringstream s("20131224");
date::sys_days tp;
s >> date::parse("%Y%m%e", tp);
if (!s.fail())
cout << date::format("%A, %B %e, %Y", tp) << endl;
}
输出:
Tuesday, December 24, 2013
上面的date::sys_days
只是std::chrono::system_clock::time_point
的typedef
,但精度为days
,而不是您的平台提供的任何东西(微秒、纳秒等)。这意味着你可以很容易地添加其他持续时间,比如std::chrono::小时、分钟、秒、毫秒等。
cout << date::format("%A, %B %e, %Y %H:%M", tp + 2h + 35min ) << endl;
Tuesday, December 24, 2013 02:35
您可以将上面的代码粘贴到这个wandbox演示中,并在各种版本的clang和gcc:中自己尝试
http://melpon.org/wandbox/permlink/PodYB3AwdYNFKbMv
试试这个(在Mac中编译)
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
const string DAY[]={"Sun","Mon","Tue",
"Wed","Thu","Fri","Sat"};
time_t rawtime;
tm * timeinfo;
time(&rawtime);
timeinfo=localtime(&rawtime);
int weekday=timeinfo->tm_wday;
cout << "Today is: " << DAY[weekday] << "n" << endl;
return 0;
}
- 我如何编写一个告诉星期几的程序?(泽勒全等)
- 将课程用于星期几
- 如何将图像的字节数组(取自 s3)转换为 C++ 或 C 中的图像/图像对象
- 如何在Visual Studio中获取当前星期几
- 如何复制包含指向其他几个成员之一的指针的对象?
- 在几个对象中找到一个相同的元素
- 每隔几秒钟移动一次对象
- 如何在C++中从tm对象中获取星期几
- 我应该如何跟踪几个对象
- 从给定日期开始的星期几
- C 11按几个属性的自定义对象集合
- 从 QT 复选框到 Postgresql 选择星期几
- 函数来设置布尔型星期几变量
- 如何使用SQLite设置星期几
- 将unix时间戳(s)转换为c++中的星期几
- 给定日期的c++星期几
- 在其他函数之间输出星期几的更好方法
- 日期到星期几算法
- 创建一个程序,根据EST时区打印出当前星期几
- 关于字符串对象寿命的几个问题