Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 字符串形式的当前日期和时间_C++_String_Date_Datetime_Time - Fatal编程技术网

C++ 字符串形式的当前日期和时间

C++ 字符串形式的当前日期和时间,c++,string,date,datetime,time,C++,String,Date,Datetime,Time,我编写了一个函数来获取当前日期和时间,格式为:DD-MM-YYYY HH:MM:SS。它是有效的,但让我们说,它相当丑陋。我如何做完全相同但更简单的事情 string currentDateToString() { time_t now = time(0); tm *ltm = localtime(&now); string dateString = "", tmp = ""; tmp = numToString(ltm->tm_mday);

我编写了一个函数来获取当前日期和时间,格式为:
DD-MM-YYYY HH:MM:SS
。它是有效的,但让我们说,它相当丑陋。我如何做完全相同但更简单的事情

string currentDateToString()
{
    time_t now = time(0);
    tm *ltm = localtime(&now);

    string dateString = "", tmp = "";
    tmp = numToString(ltm->tm_mday);
    if (tmp.length() == 1)
        tmp.insert(0, "0");
    dateString += tmp;
    dateString += "-";
    tmp = numToString(1 + ltm->tm_mon);
    if (tmp.length() == 1)
        tmp.insert(0, "0");
    dateString += tmp;
    dateString += "-";
    tmp = numToString(1900 + ltm->tm_year);
    dateString += tmp;
    dateString += " ";
    tmp = numToString(ltm->tm_hour);
    if (tmp.length() == 1)
        tmp.insert(0, "0");
    dateString += tmp;
    dateString += ":";
    tmp = numToString(1 + ltm->tm_min);
    if (tmp.length() == 1)
        tmp.insert(0, "0");
    dateString += tmp;
    dateString += ":";
    tmp = numToString(1 + ltm->tm_sec);
    if (tmp.length() == 1)
        tmp.insert(0, "0");
    dateString += tmp;

    return dateString;
}
由于C++11,您可以从标题使用:

可以使用time.h的asctime()函数简单地获取字符串

time_t _tm =time(NULL );

struct tm * curtime = localtime ( &_tm );
cout<<"The current date/time is:"<<asctime(curtime);

非C++11解决方案:使用
头,您可以使用
strftime
。确保您的缓冲区足够大,您不会希望它溢出,并在以后造成严重破坏

#include <iostream>
#include <ctime>

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;
  char buffer[80];

  time (&rawtime);
  timeinfo = localtime(&rawtime);

  strftime(buffer,sizeof(buffer),"%d-%m-%Y %H:%M:%S",timeinfo);
  std::string str(buffer);

  std::cout << str;

  return 0;
}
#包括
#包括
int main()
{
时间与时间;
结构tm*时间信息;
字符缓冲区[80];
时间(&rawtime);
timeinfo=localtime(&rawtime);
strftime(缓冲区,大小为(缓冲区),%d-%m-%Y%H:%m:%S”,timeinfo);
std::字符串str(缓冲区);

std::cout我想使用C++11的答案,但我不能,因为GCC4.9不支持std::put_time

最后,我使用了一些C++11来略微改进非C++11的答案。对于那些不能使用GCC 5但仍希望使用日期/时间格式的C++11的用户:

 std::array<char, 64> buffer;
 buffer.fill(0);
 time_t rawtime;
 time(&rawtime);
 const auto timeinfo = localtime(&rawtime);
 strftime(buffer.data(), sizeof(buffer), "%d-%m-%Y %H-%M-%S", timeinfo);
 std::string timeStr(buffer.data());
std::数组缓冲区;
缓冲区填充(0);
时间与时间;
时间(&rawtime);
const auto timeinfo=localtime(&rawtime);
strftime(buffer.data(),sizeof(buffer),%d-%m-%Y%H-%m-%S”,timeinfo);
std::string timeStr(buffer.data());

<代码> > P>在MS Visual Studio 2015(14)中使用C++,使用:
#包括
字符串NowToString()
{
时钟::系统时钟::时间点p=chrono::系统时钟::现在();
时间t=时钟::系统时钟::到时间t(p);
char-str[26];
ctime_s(str、str尺寸和t);
返回str;
}
#包括
#包括
int main()
{
std::time\u t ct=std::time(0);
char*cc=ctime(&ct);


std::难道使用起来不是更简单吗?这里有一个(和答案)关于如何使用boost(如果你不知怎么的不能使用C++11)来实现这一点:如果它溢出了缓冲区怎么办?我想应该有一个返回值,
strftime
,您需要在实际代码中检查。否?对于任何给定的格式字符串,计算最大可能的字符串长度都不需要太多思考。我不明白为什么您可以在从顶部开始的第10行上按值传递rawtime,因为时间是一个整数指向时间类型的指针:在该页面的示例中,他们使用了time()同样的方式,我不明白。有人能解释一下吗?那里有一个
&
。这意味着将传递
rawtime
变量的内容,而不是它在内存中的地址…这是存储在指针变量中的内容。要获得毫秒:auto now=std::chrono::system\u clock::now();std::chrono::time_point epoch;int ms=std::chrono::duration_cast(现在为-epoch).count()%1000;
std::put_time
在gcc 4.9中仍然缺失。gcc 5.0有它,但不是早期版本。@很快我有一个问题。在我的代码中,我有一个函数应该返回时间。返回当前时间的函数的返回类型应该是什么?@ArnavBorborah,这取决于。您可以在中返回时间,或者创建自己的tyPE.LoalTalk不是线程安全的。考虑使用LoalTimeTyr代替。不,你不能:ActhTimes没有提供问题中所要求的日期/时间格式。@ AccCuAua,虽然它不是,它确实给了你一个字符串的时间。代码是干净简洁的。干净和简洁的代码没有帮助,如果它不能提供你想要或需要的。想要一辆卡车。(字符串),你得到了一个。想要运输液体,你需要一辆油罐车,但得到一辆自卸车你不会高兴的…回答很好,但是asctime()具有返回以LF结尾的字符串的非常糟糕的想法…此外,
asctime
不像
strftime
那样对区域设置敏感。感谢您提供此代码片段,它可能会提供一些有限的、即时的帮助。通过说明为什么这是一个很好的问题解决方案,a将极大地提高其长期价值,并使其成为对于未来的读者来说,其他类似的问题可能会很有用。请在你的回答中添加一些解释,包括你所做的假设,比如
#include
s。这实际上会带来什么结果?
The current date/time is:Fri Oct 16 13:37:30 2015
#include <iostream>
#include <ctime>

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;
  char buffer[80];

  time (&rawtime);
  timeinfo = localtime(&rawtime);

  strftime(buffer,sizeof(buffer),"%d-%m-%Y %H:%M:%S",timeinfo);
  std::string str(buffer);

  std::cout << str;

  return 0;
}
 std::array<char, 64> buffer;
 buffer.fill(0);
 time_t rawtime;
 time(&rawtime);
 const auto timeinfo = localtime(&rawtime);
 strftime(buffer.data(), sizeof(buffer), "%d-%m-%Y %H-%M-%S", timeinfo);
 std::string timeStr(buffer.data());
#include <chrono>

string NowToString()
{
  chrono::system_clock::time_point p = chrono::system_clock::now();
  time_t t = chrono::system_clock::to_time_t(p);
  char str[26];
  ctime_s(str, sizeof str, &t);
  return str;
}
#include <chrono>
#include <iostream>

int main()
{
    std::time_t ct = std::time(0);
    char* cc = ctime(&ct);

    std::cout << cc << std::endl;
    return 0;
}