你能说出一些从C ++获取当前“yyyymmdd”(例如“20121219”)字符串的简单方法吗?允许Boost,因此应该更容易。我可以使用ctime
但是设置这个结构有点痛苦。
我已经这样做了
boost::gregorian::date current_date(boost::gregorian::day_clock::local_day());
int year_int = current_date.year();
int month_int = current_date.month();
int day_int = current_date.day();
然后使用
将int
转换为string
s
std::string year = boost::lexical_cast<std::string>(year_int);
std::string month = boost::lexical_cast<std::string>(month_int);
std::string day = boost::lexical_cast<std::string>(day_int);
但问题是第1天将是“1”而不是“01”应该是。
答案 0 :(得分:5)
使用日期时间I / O和方面:
/// Convert date operator
std::string operator()(const boost::gregorian::date& d) const
{
std::ostringstream os;
auto* facet(new boost::gregorian::date_facet("%Y%m%d"));
os.imbue(std::locale(os.getloc(), facet));
os << d;
return os.str();
}
答案 1 :(得分:2)
<ctime>
非常糟糕,但实际上却以一种近乎直接的方式实现了您的需求:
char out[9];
std::time_t t=std::time(NULL);
std::strftime(out, sizeof(out), "%Y%m%d", std::localtime(&t));
(test)
答案 2 :(得分:1)
答案 3 :(得分:1)
稍微更多面向C ++的@Matteo Italia版本的答案是将std::put_time
与tm
结构一起使用。
std::time_t time = std::time(nullptr);
std::tm* tm = std::localtime(&time);
std::ostringstream ss;
ss << std::put_time(tm, "%Y%m%d");
std::cout << ss.str() << std::endl;
您当然可以将ss.str()
的结果存储在std::string
中。
答案 4 :(得分:1)
很抱歉这些人都是胡说八道(例如不必要的复杂)
最直接的方式是
boost::gregorian::to_iso_string(current_date)