Chinaunix

标题: C语言中怎么样把时间转到20041225这样的? [打印本页]

作者: kinns    时间: 2004-12-25 14:04
标题: C语言中怎么样把时间转到20041225这样的?
怎么样转到这样的格式?
看了那些函数...感觉没有一个可以转啊..
不象PHP中转起来很方便...
可PHP也需要有解析啊...
那是不是C里面也同样有这样的函数啊/

      
作者: flw    时间: 2004-12-25 14:07
标题: C语言中怎么样把时间转到20041225这样的?
先调用 localtime,就可以取出一个 struct tm 型的结果,
然后自己用 sprintf 搞到一起,就可以了。
作者: daniel-hou    时间: 2004-12-25 16:52
标题: C语言中怎么样把时间转到20041225这样的?
这个没有现成的函数, 自己写一个,以后就可以随时拿来用了!!

#include <time.h>;

int main(void)
{
time_t   time;
struct tm *p;

time( &time );
p = localtime( &time );

printf( "%d-%d-%d  %d: %d: %d",
          (1900+p->;tm_year), (1+p->;tm_mon), p->;tm_mday,
          p->;tm_hour, p->;tm_min, p->;tm_sec );
}
作者: city_    时间: 2004-12-25 19:44
标题: C语言中怎么样把时间转到20041225这样的?
来个比daniel-hou 的简单一点的:
char                szTimestamp[9];
                // 格式化时间戳:"YYYYMMDD"
        memset (szTimestamp, 0x00, sizeof(szTimestamp));
        time (&t_time);
        ptmCurrtime = localtime(&t_time);
        strftime(szYearmon, 9, "%G%m%d", ptmRecv_time);
作者: FH    时间: 2004-12-25 23:17
标题: C语言中怎么样把时间转到20041225这样的?
怎么这么多人没事喜欢memset?难道memset不占用CPU时间吗?又是哪个老师这么误人子弟啊?!
作者: lilygy5    时间: 2004-12-26 10:43
标题: C语言中怎么样把时间转到20041225这样的?
原帖由 "daniel-hou" 发表:
这个没有现成的函数, 自己写一个,以后就可以随时拿来用了!!

#include <time.h>;

int main(void)
{
time_t   time;
struct tm *p;

time( &time );
p = localtime( &time );

printf( "%d-%d-%d ..........



time(&time) 这个应该改成 time = time(NULL)吧
作者: kinns    时间: 2004-12-26 13:18
标题: C语言中怎么样把时间转到20041225这样的?
那如果放进一个LONG INT 里面是不是在用1次ATOI()就OK了?
作者: windflowers1976    时间: 2004-12-26 15:13
标题: C语言中怎么样把时间转到20041225这样的?
man strftime
作者: wanbin    时间: 2004-12-26 16:20
提示: 作者被禁止或删除 内容自动屏蔽
作者: FH    时间: 2004-12-26 16:45
标题: C语言中怎么样把时间转到20041225这样的?
原帖由 "wanbin" 发表:


memset是为了初始化,不初始化很容易出问题

strftime(szYearmon, 9, "%G%m%d", ptmRecv_time);
这个不算初始化么?谁说初始化必须设为0?
作者: aero    时间: 2004-12-27 09:27
标题: C语言中怎么样把时间转到20041225这样的?
原帖由 "wanbin" 发表:


memset是为了初始化,不初始化很容易出问题


如果可以控制好内存的内容,没必要统统清零,deadbeef也是可以的,^_^。
作者: unicorns    时间: 2004-12-27 14:34
标题: C语言中怎么样把时间转到20041225这样的?
给wanbin喊喊冤
我觉得初始化是个好习惯.
全memset成0是浪费了点CPU的时间,如果是字符串的话把第一个置成0就OK了.但这样也有问题,万一后面对他直接使用了类似memcpy之类的东西就不能保证以0结束了.
万事小心为妙,大多数情况下还是不会在乎节约那一点CPU时间的.为了避免浪费人大量的时间来查找错误浪费点CPU的时间还是值得的.
作者: aero    时间: 2004-12-27 14:38
标题: C语言中怎么样把时间转到20041225这样的?
^_^,偶不用,偶是怕用了让自己犯懒,从此不去仔细思考变量的变化。其他的,仁者见仁了。
作者: flw    时间: 2004-12-27 15:00
标题: C语言中怎么样把时间转到20041225这样的?
该用就用,不该用就不用。
功底差且不思进去的朋友们多用用无妨,
不过,有些要求比较高的好公司是不要这样的程序员的。
所以,如果想把这一行干好,就还是参考一下 aero 的观点吧。
作者: torrent    时间: 2004-12-27 15:09
标题: C语言中怎么样把时间转到20041225这样的?
原帖由 "flw" 发表:
该用就用,不该用就不用。
功底差且不思进去的朋友们多用用无妨,
不过,有些要求比较高的好公司是不要这样的程序员的。
所以,如果想把这一行干好,就还是参考一下 aero 的观点吧。

看来flw斑竹的3500贴的愿望已经提前实现了
作者: zi_ji    时间: 2004-12-27 15:36
标题: C语言中怎么样把时间转到20041225这样的?
《UNIX环境高级编程》第六章 系统数据文件和信息 中已说得很明白了
楼主要多读书阿
作者: unicorns    时间: 2004-12-27 15:58
标题: C语言中怎么样把时间转到20041225这样的?
原帖由 "flw" 发表:
该用就用,不该用就不用。
功底差且不思进去的朋友们多用用无妨,
不过,有些要求比较高的好公司是不要这样的程序员的。
所以,如果想把这一行干好,就还是参考一下 aero 的观点吧。


不敢苟同.
实际上应用界的发展趋势是将程序员的注意力从这些细节上移开
把更多精力集中到业务逻辑上去.

在学习中把这些搞清楚是好事情,并不表示在做事情的时候也要始终去关注你本来就明白的事情.
作者: aero    时间: 2004-12-27 16:00
标题: C语言中怎么样把时间转到20041225这样的?
原帖由 "unicorns" 发表:


不敢苟同.
实际上应用界的发展趋势是将程序员的注意力从这些细节上移开
把更多精力集中到业务逻辑上去.

在学习中把这些搞清楚是好事情,并不表示在做事情的时候也要始终去关注你本来就明白的事情.

You should use java instead c.I think that kind of c code is very ugly.
作者: unicorns    时间: 2004-12-27 16:16
标题: C语言中怎么样把时间转到20041225这样的?
原帖由 "aero" 发表:

You should use java instead c.I think that kind of c code is very ugly.


我之所以目前做的事情选择C而不是java不是因为C很高尚.
而是因为实际的需要.

我也不认为程序加了一个memset就导致了"ugly"
我关心的是开发团队的效率和程序的健壮性.
客户永远不会关心你的程序里有没有memset.
客户关心的就两点,就是我上面提到的.

我只想老老实实做一个工程师,没有想过成为一个艺术家,这或许就是不思进取?
作者: aero    时间: 2004-12-27 16:40
标题: C语言中怎么样把时间转到20041225这样的?
原帖由 "unicorns" 发表:


我之所以目前做的事情选择C而不是java不是因为C很高尚.
而是因为实际的需要.

我也不认为程序加了一个memset就导致了"ugly"
我关心的是开发团队的效率和程序的健壮性.
客户永远不会关心你的程序里有没有mems..........


^_^,我明白你所说的。的确,项目的开发效率和健壮性都是非常重要的。我们平时写的代码也都是非常注意风格和断言这些东西的。但是,我说上面的话,是基于下面2个理由:
1、C已经渐渐的离开了应用程序开发领域了。我们无可否认的是,java、C++等一些从语法上面向对象,致力与快速、高效、简洁开发的语言正不断取代C的位置。那些越来越简单的各种工具,让人们的注意力越来越集中于项目逻辑,而不是技术细节。而C也正不断专注与系统开发和嵌入式开发部分。对于应用软件来说,几个函数的调用无所谓。可是对于系统软件和嵌入式软件,有些时候,几个时钟周期都是很重要的。
2、说它ugly纯是从感觉的角度来说的。呵呵。如果C代码中出现:x = x + 1;不知道别人,我是认为很ugly的。^_^,不写成x++,x += 1也比直接那么写要好看得多。所以,看到有些人微微缩缩的逢数组便memset。给人的感觉就是过分的紧张,看不到代码中的轻松和自信。

^_^,一家之言。
作者: flw    时间: 2004-12-27 18:08
标题: C语言中怎么样把时间转到20041225这样的?
原帖由 "unicorns" 发表:
不敢苟同.
实际上应用界的发展趋势是将程序员的注意力从这些细节上移开
把更多精力集中到业务逻辑上去.

在学习中把这些搞清楚是好事情,并不表示在做事情的时候也要始终去关注你本来就明白的事情.

其实,浪费 CPU 的时间只是一方面。
另一方面,我觉得是浪费敲代码的时间。
当然了,如果你的编辑器可以自动生成 memset 的话,我倒是可以忍受。
否则,当我明知道我的字符串马上会在下面进行“写”操作,
却又要让我去一个字母一个字母敲 memset,一不留神还会因为敲错变量名称(注)而把别的变量给 set 了,那真是痛苦死了。

大家记住:
memset 只在第一个操作是读操作的时候才有用。
如果第一个操作就是写操作,那么根本就不需要用 memset,
用不分青红皂白一上来就去 memset  这种方式来换取心里的安慰我觉得纯粹是不自信的表现。

反正对于我来讲,我很容易就可以分清楚我的字符串需不需要 memset,
因此我也不会觉得我可能哪天会漏掉一个 memset,
再或者会因为考虑半天需不需要 memset  而分神。

注:当要输入两行类似的代码时,我经常会眼睛盯着上一行来敲键盘,从而一不留神就敲成和上面一样的内容了。再或者复制一段代码的时候也会有同样的问题。
作者: killam    时间: 2004-12-27 18:21
标题: C语言中怎么样把时间转到20041225这样的?
void MA_GetStaticFileTime( char* plocaltime )
{
    time_t tt = time( NULL );  
    struct tm *curtime = localtime( &tt );  
    int year = 1900 + curtime->;tm_year;
    int month = curtime->;tm_mon + 1;
    int day = curtime->;tm_mday;
    int hour = curtime->;tm_hour;
    int min = curtime->;tm_min;  
    //int sec = curtime->;tm_sec;  
    sprintf( plocaltime, "%04d%02d%02d%02d%02d", year, month, day, hour, min );
    return;
}
作者: FH    时间: 2004-12-28 10:10
标题: C语言中怎么样把时间转到20041225这样的?
其实我想说的是:不能片面地理解初始化,如果把初始化理解为“清零”那就太狭隘了。
客户是不关心细枝末节的东西,但是如果做产品也是这样一种态度就不对了,我们现在的很多应用工具效率低下、内存耗费过高、进而导致系统响应缓慢等现象,不能说和这种态度不无关系。
精益求精永远不会错!
作者: asdmonster    时间: 2004-12-28 10:23
标题: C语言中怎么样把时间转到20041225这样的?
原帖由 "flw" 发表:

其实,浪费 CPU 的时间只是一方面。
另一方面,我觉得是浪费敲代码的时间。
当然了,如果你的编辑器可以自动生成 memset 的话,我倒是可以忍受。
否则,当我明知道我的字符串马上会在下面进行“写”操作,
却又..........

要是别人修改你的程序的话,只要一犯晕,bug连绵不绝。
作者: unicorns    时间: 2004-12-28 11:08
标题: C语言中怎么样把时间转到20041225这样的?
兄弟们说的都很好.
总结起来实际上就是看问题的角度不同.

aero说的没有错,如果在系统层做事情memset这东西当然是铺张浪费.
做嵌入式因为硬件限制也不允许这种铺张浪费.我前面所指只是就应用程序而言.

我觉得做程序要找到一个平衡点,不可否认太过频繁的使用了memset会使程序效率上受到影响,过多分配的内存会使程序占用的资源大大上升.但就象马克思他老人家说的,事物都是有两面性的,由此带来的好处就是程序的开发周期缩短,可维护性增强等等.片面的追求哪一方面都不能说是正确的,如果可以找到一个可以接受的中间点那何乐而不为呢.

现在的情况是硬件资源的价格要远远低于人力资源的价格,用机器的时间来换人的时间还是比较划算的一件事情.放在十年前那是另一种情况.

flw老大,今天我和你意见差别可大了点.
首先,如果这个程序是你一个人写,我个人相信你的能力可以写好没问题.但现在又有多少个工程是一个人干下来的.你不可能寄希望于开发团队里每个人都和你的水平一样,而且一直都保持一颗清醒的头脑,所以如果条件允许还是在出问题的源头把他堵住的好.
其次,不能简单的分读操作还是写操作而辨别是否用memset之类的初始化.有些变量定义了可能在很远以后才会使用.不会一次考虑那么远的.

我曾经碰到这样一个问题.前人写了这样一段代码

  1. char strbuf[1024] ;
  2. ........
  3. ........
  4. strcpy(strbuf, "initstr") ;
  5. ........
  6. ......
  7. strcat(strbuf, "str1") ;
  8. strcat(strbuf, "str2") ;
  9. .......
  10. .......
复制代码

后来有人处于某些情况又改了这个程序,把strcpy那段去掉了.
结果可想而知.

可能有人会说那就只能怪后面改的那人学艺不精.
但这根本就是可以用一个memset避免的.
作者: quil    时间: 2004-12-28 11:19
标题: C语言中怎么样把时间转到20041225这样的?
原帖由 "flw" 发表:

大家记住:
memset 只在第一个操作是读操作的时候才有用。
如果第一个操作就是写操作,那么根本就不需要用 memset,
用不分青红皂白一上来就去 memset 这种方式来换取心里的安慰我觉得纯粹是不自信的表现。
却又..........

支持老大,不过……
一个被memset的地址读它干嘛??     
作者: yuxh    时间: 2004-12-28 11:32
标题: C语言中怎么样把时间转到20041225这样的?
偶支持unicorns,不能以君子之心度小人之腹!
作者: yuxh    时间: 2004-12-28 11:39
标题: C语言中怎么样把时间转到20041225这样的?
还有这样的情况:
1、strcpy(buf, fuc());
但fuc() return NULL;

2、memcpy(buf, value1, len1);
     memcpy(buf+len1, value2, len2);
......
不用memset,就这样
len = 0;
memcpy(buf, value1, len1);
len += len1;
....
buf[len] = 0;

不爽
作者: zuibird    时间: 2004-12-28 12:27
标题: C语言中怎么样把时间转到20041225这样的?
这贴方向已经彻底与楼主 byebye了,呵呵

flw         
发表于: 2004-12-27 15:00    发表主题:
功底差且不思进去的朋友们多用用无妨,
不过,有些要求比较高的好公司是不要这样的程序员的


斑竹过份了吧,程序的应用需要和个人风格都不该涉及到人品吧?
至于公司的要求也因业务差异而不同。



aero         
帖子总数发表于: 2004-12-27 16:40    发表主题:
1、C已经渐渐的离开了应用程序开发领域了。我们无可否认的是,java、C++等一些从语法上面向对象,致力与快速、高效、简洁开发的语言正不断取代C的位置。那些越来越简单的各种工具,让人们的注意力越来越集中于项目逻辑,而不是技术细节。而C也正不断专注与系统开发和嵌入式开发部分。对于应用软件来说,几个函数的调用无所谓。可是对于系统软件和嵌入式软件,有些时候,几个时钟周期都是很重要的。


c语言的特点并不限制其应用环境就一定要在系统开发,电信,金融等领域许多核心业务控制系统就是c实现的,这里对程序的稳定,健壮和维护性的要求显然更被看重。
作者: aero    时间: 2004-12-28 12:35
标题: C语言中怎么样把时间转到20041225这样的?
原帖由 "zuibird" 发表:


c语言的特点并不限制其应用环境就一定要在系统开发,电信,金融等领域许多核心业务控制系统就是c实现的,这里对程序的稳定,健壮和维护性的要求显然更被看重。


晕,我说的只是一个方面啊,我又没都一棒子打死。A和B是两个命题,!A成立的话,B不一定成立吧?

另外,过分的“蛇足”,不见得就对程序的健壮性和可维护性有帮助。过分冗长的代码,反而会给读代码的人带来麻烦。当然memset并不过分,只是一个仁者见仁的问题。

这是一个仁者见仁的问题,正如每个人的代码有每个人不同的风格一样。
作者: superdoctor    时间: 2004-12-28 15:58
标题: C语言中怎么样把时间转到20041225这样的?
管他呢,喝酒去!
作者: 小雨飞    时间: 2004-12-30 20:30
标题: C语言中怎么样把时间转到20041225这样的?
你看看下面这段代码吧,我经常用的。
..............................
    struct     tm when;
    time_t     now;
    time(&now);
    when=*localtime(&now);
    memset(tday,0,sizeof(tday));
    sprintf(tday,"%8ld",(when.tm_year + 1900) * 10000 + (when.tm_mon + 1) * 100
+ when.tm_mday);
........................................




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2