在C ++中获取“yyyymmdd”日期字符串的最简单方法(允许提升)

时间:2012-12-19 17:39:29

标签: c++

你能说出一些从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”应该是。

5 个答案:

答案 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_timetm结构一起使用。

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)

http://www.boost.org/doc/libs/1_57_0/doc/html/date_time/gregorian.html#date_time.gregorian.date_class