您的位置:首页 > 编程语言 > C语言/C++

IOS开发时间格式转换之──C语言中time_t数据类型转为NSString类型

2011-08-05 09:18 591 查看
一、time_t介绍

包含文件:

#ifndef __TIME_T

#define __TIME_T /* 避免重复定义 time_t */

typedef long time_t; /* 时间值time_t
为长整型的别名*/

#endif
既然time_t实际上是长整型,到未来的某一天,从一个时间点(一般是1970年1月1日0时0分0秒)到那时的秒数(即日历时间)超出了长整形所能表示的数的范围怎么办?对time_t数据类型的值来说,它所表示的时间不能晚于2038年1月18日19时14分07秒。为了能够表示更久远的时间,一些编译器厂商引入了64位甚至更长的整形数来保存日历时间。比如微软在Visual
C++中采用了__time64_t数据类型来保存日历时间,并通过_time64()函数来获得日历时间(而不是通过使用32位字的time()函数),这样就可以通过该数据类型保存3001年1月1日0时0分0秒(不包括该时间点)之前的时间。

在time.h头文件中,我们还可以看到一些函数,它们都是以time_t为参数类型或返回值类型的函数:

double difftime(time_t time1, time_t time0);

time_t mktime(struct tm * timeptr);

time_t time(time_t * timer);

char * asctime(const struct tm * timeptr);

char * ctime(const time_t *timer);

此外,time.h还提供了两种不同的函数将日历时间(一个用time_t表示的整数)转换为我们平时看到的把年月日时分秒分开显示的时间格式tm:

struct tm * gmtime(const time_t *timer);

struct tm * localtime(const time_t * timer);
二、time_t转换为NSString

1)转换方法如下:

-(NSString *)dateInFormat:(time_t)dateTime format:(NSString*) stringFormat

{

char buffer[80];

const char *format = [stringFormat UTF8String];

struct tm * timeinfo;

timeinfo = localtime(&dateTime);

strftime(buffer, 80, format, timeinfo);

return [NSString stringWithCString:buffer encoding:NSUTF8StringEncoding];

}

2)如何使用

在需要转换的文件中,进行如下操作:

//时间格式

NSString *str = @"%d.%m.%Y %H:%M:%S";

//其中sts.createdAt为time_t类型,这个数据是来自新浪微博

NSString *time = [self dateInFormat:sts.createdAt format:str];

NSLog(@"createdAt: %@",time);

控制台输出如下:

createdAt: 05.08.2011 00:17:56
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: