C++高手快来救命啊!百分求教!

hbx1982 2008-05-05 05:26:14
以前没有用过C++,最近公司非要让我做一个C++的项目,遇到一个问题,请各位兄弟帮忙解决一下。

环境VS 2005
该C++工程创建时选择的是ATL项目,现在我需要把一个时间的字符串转换为确定的格式。
例如:
"2008-2-20 上午 8:08:00" 转换为 "20080220080800"
"星期一 2008年5月5日 上午 8:08:00" 转换为 "20080505080800"
"Friday, June 15, 2007 5:34 AM"
......

在C#中有函数(DateTime.Parse())可以直接将一个字符串转换为DateTime类型,然后可以很轻松的得到需要的格式

但是不知C++中是否有办法可以转换,或者有什么方法可以调用到C#中的方法来得到该格式的字符串?

时间格式的字符串是不确定的

问题解决后百分送上,还请各位帮忙啊。
...全文
144 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
hbx1982 2008-05-07
  • 打赏
  • 举报
回复
谢谢xjh_net,刚试了一下,应该就是我想要的答案.

同时也谢谢楼上各位的帮顶和建议.非常感谢
icansaymyabc 2008-05-06
  • 打赏
  • 举报
回复
VC 也可以做托管代码嘛。C# 可以调用的 VC 都能调用。
mienfong 2008-05-06
  • 打赏
  • 举报
回复
當然可以啊,只要是.NET的函式而且也是使用VS2005就行。
你只要將C#的DateTime.Parse()改成VC++的型式DateTime::Parse()。
同理只要是C#若要用在C++就只要將原本的.改成::就可以了。
  • 打赏
  • 举报
回复
难道sscanf不是C++的函数?
你多写几个解析的格式就行了,没有现成的东西让你用.
hbx1982 2008-05-06
  • 打赏
  • 举报
回复
谢谢楼上各位的帮助!

不过我们要求必须用C++做,而且日期格式实在太多,并不是只有上面列出来的那几种.以上只是列出了中文和英文中的几种,还有其他语言的也要能够支持的.

希望有高手能够继续解答.
xjh_net 2008-05-06
  • 打赏
  • 举报
回复
1、用COleDateTime-〉ParseDateTime(stime);构造时间
2、Format(sFormat)格式化输出的字符串
COleDateTime dt;
dt.ParseDateTime(stime);
CString sout=dt.Format("%Y%M%D%H%M%s");
xjh_net 2008-05-06
  • 打赏
  • 举报
回复
COleDateTime-〉ParseDateTime
hzdwang 2008-05-06
  • 打赏
  • 举报
回复
同意9楼的回答,如果不解决的话,就是楼主太!!
  • 打赏
  • 举报
回复
用托管的话,打包的时候记得要打包.net运行库.
  • 打赏
  • 举报
回复
这样你提供的字符串都能解析出来了.
只是第三种的时候你需要自己对应英文的月份,上下午,自己转化成具体的数字就可以了

int main()
{
int a[6]={0};
sscanf("2008-2-20 上午 8:08:00","%d-%d-%d 上午 %d:%d:%d" , a,a+1,a+2,a+3,a+4,a+5);
printf("%4d%02d%02d%02d%02d%02d\n",a[0],a[1],a[2],a[3],a[4],a[5]);

sscanf("星期一 2008年5月5日 上午 8:08:00","星期一 %d年%d月%d日 上午 %d:%d:%d" , a,a+1,a+2,a+3,a+4,a+5);
printf("%4d%02d%02d%02d%02d%02d\n",a[0],a[1],a[2],a[3],a[4],a[5]);

char w[16]={0};
char m[16]={0};
char am[16]={0};
int b[4]={0};
sscanf("Friday, June 15, 2007 5:34 AM","%[^,]%*[, ]%[a-zA-Z] %d, %d %d:%d %s" , w , m ,b,b+1,b+2,b+3,am);

printf(" %s %s %d %d %d %d %s",w,m,b[0],b[1],b[2],b[3],am);
return 0;
};

  • 打赏
  • 举报
回复
现成的方法是没有的,你要是调用C#的功能做的话还不如都用C#做.反正都得以来.net运行库

你可以用sscanf试试看


int main()
{
int a[6]={0};
sscanf("2008-2-20 上午 8:08:00","%d-%d-%d 上午 %d:%d:%d" , a,a+1,a+2,a+3,a+4,a+5);
printf("%4d%02d%02d%02d%02d%02d\n",a[0],a[1],a[2],a[3],a[4],a[5]);

sscanf("星期一 2008年5月5日 上午 8:08:00","星期一 %d年%d月%d日 上午 %d:%d:%d" , a,a+1,a+2,a+3,a+4,a+5);
printf("%4d%02d%02d%02d%02d%02d\n",a[0],a[1],a[2],a[3],a[4],a[5]);
return 0;
};
liangzhao123 2008-05-05
  • 打赏
  • 举报
回复
路过
zhu_gx 2008-05-05
  • 打赏
  • 举报
回复
这个在C++版中回答的可能会多些
zhu_gx 2008-05-05
  • 打赏
  • 举报
回复
帮你顶

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧