7

C++ から現在の "yyyymmdd" ("20121219" など) の文字列を取得する簡単な方法を教えてください。ブーストが許可されているので、簡単になるはずです。使用できます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();

次に、を使用してints をs に変換しますstring

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);

しかし、これの問題は、本来あるべき「01」ではなく、1 日目が「1」になることです。

4

5 に答える 5

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();
}
于 2012-12-19T17:42:20.113 に答える
3

ワンライナーとして:

#include <boost/date_time/gregorian/gregorian.hpp>

std::string date = boost::gregorian::to_iso_string(boost::gregorian::day_clock::local_day());

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

于 2015-02-20T16:16:04.167 に答える
2

<ctime> 恐ろしいですが、実際にはほとんど簡単な方法で必要なものを達成します。

char out[9];
std::time_t t=std::time(NULL);
std::strftime(out, sizeof(out), "%Y%m%d", std::localtime(&t));

(テスト)

于 2012-12-19T17:51:38.343 に答える
1

boostには、使用するフォーマット フラグがたくさんあります。

http://www.boost.org/doc/libs/1_52_0/doc/html/date_time/date_time_io.html

于 2012-12-19T17:43:26.290 に答える
1

@Matteo Italiaの答えのもう少しC++指向のバージョンは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

于 2012-12-19T18:01:54.260 に答える