免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6572 | 回复: 7
打印 上一主题 下一主题

如何只用标准C++、在一行代码里输出当前时间?最好还能指定格式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-12 10:45 |只看该作者 |倒序浏览
如题。
我用std:fstream来打日志的,只用标准库里面的函数,所以要求一行,方便些。

论坛徽章:
0
2 [报告]
发表于 2012-06-12 11:15 |只看该作者
本帖最后由 sonicling 于 2012-06-12 11:16 编辑

你这不是哪壶不开提哪壶吗。

非要用stream也行,用setw、setprecision、setfill。

如果date是一个struct或者class,可以自己重载运算符

template<typename OS>
OS &operator << (OS &os, const my_date_type & date)
{
    os << setfill('0') <<  setw(4) << date.year
         << setw(0) << _T('-')  <<  setw(2) << date.month
         << setw(0) << _T('-')  <<  setw(2) << date.day << setw(0);
    return os;
}

my_date_type date;
cout << date;
ofstream fs;
fs << date;

论坛徽章:
0
3 [报告]
发表于 2012-06-12 11:25 |只看该作者
回复 1# csoapy
ofstream os;
os <<setfill('0')<< setw(2) << Month << '-' <<setw(2) <<Day << '- ' <<setw(4)<<Year;
输出格式为MM - DD - YYYY

   

论坛徽章:
0
4 [报告]
发表于 2012-06-15 13:25 |只看该作者
sonicling 发表于 2012-06-12 11:15
你这不是哪壶不开提哪壶吗。


呵呵。看来这个问题真是无解啊,不做点额外工作,你甭想用一条语句输出当前时间。

论坛徽章:
0
5 [报告]
发表于 2014-01-19 18:06 |只看该作者
弱弱地说,这样算的么:
output << _strtime((char*)malloc(sizeof(char*))) << " " << _strdate((char*)malloc(sizeof(char*))) << endl;

论坛徽章:
1
技术图书徽章
日期:2014-03-06 15:32:30
6 [报告]
发表于 2014-01-20 15:14 |只看该作者
回复 5# p36288


    作死的节奏

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
7 [报告]
发表于 2014-01-20 16:08 |只看该作者
回复 1# csoapy

用boost库会很方便:
  1. std::cout<<boost::posix_time::to_simple_string(boost::posix_time::second_clock::local_time())<<std::endl;
复制代码
如果不用boost只能会C++11引用的chrono或者使用标准C库:
  1. std::time_t t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
  2. std::cout<<std::ctime(&t)<<std::endl;
复制代码
C style:
  1. time_t t = mktime(NULL);
  2. std::cout<<ctime(&t)<<std::endl;
  3.    
复制代码
只有用boost库的时候才能一行代码搞定。或者自己去封装重载了流操作符的时间类。

论坛徽章:
1
摩羯座
日期:2013-12-19 10:04:07
8 [报告]
发表于 2014-01-22 13:56 |只看该作者
p36288 发表于 2014-01-19 18:06
弱弱地说,这样算的么:
output << _strtime((char*)malloc(sizeof(char*))) << " " << _strdate((char*)malloc(sizeof(char*))) << endl;

1 准备的缓冲区太小 直接越界
2 无法free
3 代码是错误的 所以当然不算
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP