C ++格式化日期

时间:2013-06-17 15:36:05

标签: c++ date boost

这可能是一个非常简单的问题,但是来自PHP世界,是否有一种SIMPLE(不是环游世界)的方式以C ++的特定格式输出当前日期?

我希望将当前日期表示为“Y-m-d H:i”(PHP“日期”语法),如“2013-07-17 18:32”。它总是用16个字符表示(包括前导零)。

如果有帮助,我很好,包括Boost库。这是vanilla / linux C ++(没有Microsoft头文件)。

非常感谢!

5 个答案:

答案 0 :(得分:4)

strftime是我能想到的最简单的没有提升。参考和例子:http://en.cppreference.com/w/cpp/chrono/c/strftime

答案 1 :(得分:2)

你的意思是这样的:

#include <iostream>
#include <ctime>

using namespace std;

int main( )
{
   // current date/time based on current system
   time_t now = time(0);

   // convert now to string form
   char* dt = ctime(&now);

   cout << "The local date and time is: " << dt << endl;

   // convert now to tm struct for UTC
   tm *gmtm = gmtime(&now);
   dt = asctime(gmtm);
   cout << "The UTC date and time is:"<< dt << endl;
}

结果:

The local date and time is: Sat Jan  8 20:07:41 2011

The UTC date and time is:Sun Jan  9 03:07:41 2011

答案 2 :(得分:1)

传统的C方法是使用strftime,可用于格式化time_t(PHP允许您使用当前时间或“从其他地方获取的时间戳” ),所以如果你想“现在”,你需要先调用time

答案 3 :(得分:1)

C ++ 11支持std::put_time

#include <iostream>
#include <iomanip>
#include <ctime>

int main()
{
    std::time_t t = std::time(nullptr);
    std::tm tm = *std::localtime(&t);
    std::cout.imbue(std::locale("ru_RU.utf8"));
    std::cout << "ru_RU: " << std::put_time(&tm, "%c %Z") << '\n';
    std::cout.imbue(std::locale("ja_JP.utf8"));
    std::cout << "ja_JP: " << std::put_time(&tm, "%c %Z") << '\n';
}

答案 4 :(得分:0)

您可以使用提升date facets以给定格式打印日期:

//example to customize output to be "LongWeekday LongMonthname day, year"
//                                  "%A %b %d, %Y"
date d(2005,Jun,25);
date_facet* facet(new date_facet("%A %B %d, %Y"));
std::cout.imbue(std::locale(std::cout.getloc(), facet));
std::cout << d << std::endl;
// "Saturday June 25, 2005"

或者再次使用提升日期时间库它是possible,但不完全相同。

  //Output the parts of the date - Tuesday October 9, 2001
  date::ymd_type ymd = d1.year_month_day();
  greg_weekday wd = d1.day_of_week();
  std::cout << wd.as_long_string() << " "
            << ymd.month.as_long_string() << " "
            << ymd.day << ", " << ymd.year
            << std::endl;

正如其他答案中所建议的那样,使用strftime函数对于简单的情况可能更容易,并且在C ++中开始,即使它最初是C函数:)