https://blog.csdn.net/u012605210/article/details/37879511
有时会遇到这样的问题,需要把时间和时间戳互相转换
比如把当前时间转换成 “20140716155436”这样的格式
或者是把“20140716155436”转换成“2014-07-16 15:54:36”
首先来第一个:
当前时间转换成 “20140716155436”这样的格式
///////////////////////////////
//获取当前时间
NSDate * today = [NSDate date];
NSLog(@"%@",today);
打印出来是“2014-07-16 07:54:36 +0000”
很奇怪?现在明明是2014-07-16 15:54:36啊
因为存在不同时区,系统默认格林尼治时间
所以就要转换时间格式了
//转换时间格式
NSDateFormatter *df = [[NSDateFormatter alloc] init];//格式化
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString * s1 = [df stringFromDate:today];
NSLog(@" s1s1s1s%@",s1);
打印出来是“2014-07-16 15:54:36”
现在已经获取到当前的时间
这样还没有完呢,需要转换成一个字符串,类似“20140716052021”的时间戳
NSDate * date = [df dateFromString:s1];
//转换时间格式
NSDateFormatter *df2 = [[NSDateFormatter alloc] init];//格式化
[df2 setDateFormat:@"yyyyMMddHHmmss"];
[df2 setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"]];
NSLog(@"%@",[df2 stringFromDate:date]);
接下来就是第二个:
把“20140716155436”转换成“2014-07-16 15:54:36”
首先要把20140716155436转换成时间格式
//转换时间格式
NSDateFormatter *df = [[NSDateFormatter alloc] init];//格式化
[df setDateFormat:@"yyyyMMddHHmmss"];
[df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"] ];
NSDate *date =[[NSDate alloc]init];
date =[df dateFromString:bill_timeStr];
str = [NSString stringWithFormat:@"%@",date];
str的结果是“2014-07-16 07:54:36 +0000”
这时候就需要再转一次
//
NSDateFormatter * df2 = [[NSDateFormatter alloc] init];
[df2 setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString * str1 = [df2 stringFromDate:date];
str1的结果是“2014-07-16 15:54:36”
ok,大功告成
例1、 从服务器段获取到的字符串转化为时间如:转化1416882712000
//网络请求获取的数据
NSString *time = [NSStringstringWithFormat:@%@,[[dateListobjectAtIndex:indexPath.row]gradeDate]];
NSInteger num = [time integerValue]/1000;(重点)
NSDateFormatter *formatter = [[[NSDateFormatteralloc]init]autorelease];
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
[formatter setDateFormat:@YYYY-MM-dd];
NSDate*confromTimesp = [NSDatedateWithTimeIntervalSince1970:num];NSString*confromTimespStr = [formatterstringFromDate:confromTimesp];
cell.DateContent.text = confromTimespStr;
转化之后结果为:2014-11-25
例2、如何如何将一个字符串如“ 20110826134106”装化为任意的日期时间格式,下面列举两种类型:
NSString*string = @20110826134106;
NSDateFormatter *inputFormatter= [[[NSDateFormatter alloc] init] autorelease];
[inputFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@en_US] autorelease]];
[inputFormatter setDateFormat:@yyyyMMddHHmmss];
NSDate*inputDate = [inputFormatter dateFromString:string];
NSLog(@date= %@, inputDate);
NSDateFormatter *outputFormatter= [[[NSDateFormatter alloc] init] autorelease];
[outputFormatter setLocale:[NSLocale currentLocale]];
[outputFormatter setDateFormat:@yyyy年MM月dd日 HH时mm分ss秒];
NSString *str= [outputFormatter stringFromDate:inputDate];
NSLog(@testDate:%@,str);
两次打印的结果为:
date= 2011-08-26 05:41:06 +0000
testDate:2011年08月26日 13时41分06秒
iOS时间的时区转换以及一些方法记录
https://www.jianshu.com/p/b39852ddbf0c
系统的一些方法
NSTimeInterval timeZoneOffset = [[NSTimeZone systemTimeZone] secondsFromGMT]; [NSTimeZone systemTimeZone];//系统所在时区 [NSTimeZone defaultTimeZone];//默认时区,貌似和上一个没什么区别 [NSTimeZone timeZoneForSecondsFromGMT:0];//这就是GMT+0时区了 [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:8*60*60]];//直接指定时区,这里是东8区
将时间戳转换成时间
NSTimeInterval interval = [[NSDate date] timeIntervalSince1970]; NSDate *date = [NSDate dateWithTimeIntervalSince1970:interval]; NSDateFormatter *objDateformat = [[NSDateFormatter alloc] init]; [objDateformat setDateFormat:@"yyyy-MM-dd HH:mm"]; self.timeStr = [objDateformat stringFromDate:date];
将0时区时间转换成本地时区的时间
[formatter setTimeZone:[NSTimeZone systemTimeZone]];
将字符串转换为date
- (NSDate *)stringToDate:(NSString *)strdate { NSDateFormatter *dateFormatter = [[NSDateFormatteralloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate *retdate = [dateFormatter dateFromString:strdate]; [dateFormatter release]; return retdate; }
将date转换为字符串
- (NSString *)dateToString:(NSDate *)date { NSDateFormatter *dateFormatter = [[NSDateFormatteralloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSString *strDate = [dateFormatter stringFromDate:date]; [dateFormatter release]; return strDate; }
iOS中NSDate和NSString相互转换
https://blog.csdn.net/whuizhou/article/details/46753393
本文来源地址:http://www.osjoin.com
今天给大家分享一些关于NSDate和NSString相互转换。
日期转成字符串。这个虽然简单,但是我相信很多朋友初次遇到肯定束手无策。脑子里蹦出四个字:这怎么转?直接上代码:
-
//获取系统当前时间
-
NSDate *currentDate = [NSDate date];
-
//用于格式化NSDate对象
-
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
-
//设置格式:zzz表示时区
-
[dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss zzz"];
-
//NSDate转NSString
-
NSString *currentDateString = [dateFormatter stringFromDate:currentDate];
-
//输出currentDateString<span style="font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif; line-height: 25.6000003814697px; white-space: pre-wrap;">NSLog(@"%@",currentDateString);</span>
NSDate对象包含两个部分,日期(Date)和时间(Time)。格式化的时间字符串主要也是针对日期和时间的。NSDateFormatter是一个很常用的类,用于格式化NSDate对象,支持本地化的信息。
常用的转换格式为:
yyyy-MM-dd HH:mm:ss.SSS
yyyy-MM-dd HH:mm:ss
yyyy-MM-ddMM dd yyyy
NSDateFormatter的转换格式:
-
G: 公元时代,例如AD公元
-
yy: 年的后 2位
-
yyyy: 完整年
-
MM: 月,显示为 1-12
-
MMM: 月,显示为英文月份简写,如 Jan
-
MMMM: 月,显示为英文月份全称,如 Janualy
-
dd: 日, 2位数表示,如02
-
d: 日, 1-2位显示,如 2
-
EEE: 简写星期几,如Sun
-
EEEE: 全写星期几,如Sunday
-
aa: 上下午,AM/PM
-
H: 时, 24小时制,0-23
-
K:时, 12小时制,0-11
-
m: 分, 1-2位
-
mm: 分, 2位
-
s: 秒, 1-2位
-
ss: 秒, 2位
-
S: 毫秒
既然NSDate可以转成NSString,毫无疑问NSString也可以转成NSDate。代码如下:
-
/**
-
* 利用nsdateformatter 转换时间
-
-
把当前时间转换为字符串
-
*/
-
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
-
[formatter setDateFormat: @"yyyy-MM-dd HH:mm:sss"];
-
//获取当前时间
-
NSDate *dateNow = [NSDate date];
-
NSLog(@"%@",[formatter stringFromDate:dateNow]);
-
/**
-
* 把字符串时间转换为nsdate
-
*/
-
-
NSDateFormatter *formatter1 = [[NSDateFormatter alloc]init];
-
[formatter setDateFormat: @"yyyy-MM-dd HH-mm-sss"];
-
-
NSDate *resDate = [formatter dateFromString:@"2014-10-1 12-00-00"];
-
NSLog(@"%@",resDate);
转换结论:
把一个nsdate类型转换成string类型的时间格式的时候,会在零时区的基础上加8个小时
把一个string类型时间格式转换成nsdate格式的时候,会把时间回归到零时区记时
在转换过程中,系统会自动帮你计算。人为的好像还不能限制。
在转换时间的时候一定要把占位符 写好
以及各个时间长度的占位符。不然就会得到的就是null。
转换工具类
在项目中,我们需要用到转换的地方可能不止一处,所以建议我们定义一个工具类。在工具类里实现如下两个方法:
-
//NSDate转NSString
-
+ ( NSString *)stringFromDate:(NSDate *)date
-
{
-
//获取系统当前时间
-
NSDate *currentDate = [NSDate date];
-
//用于格式化NSDate对象
-
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
-
//设置格式:zzz表示时区
-
[dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss zzz"];
-
//NSDate转NSString
-
NSString *currentDateString = [dateFormatter stringFromDate:currentDate];
-
//输出currentDateString
-
NSLog(@"%@",currentDateString);
-
return currentDateString;
-
}
-
-
//NSString转NSDate
-
+ ( NSDate *)dateFromString:(NSString *)string
-
{
-
//需要转换的字符串
-
NSString *dateString = @"2015-06-26 08:08:08";
-
//设置转换格式
-
NSDateFormatter *formatter = [[NSDateFormatter alloc] init] ;
-
[formatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
-
//NSString转NSDate
-
NSDate *date=[formatter dateFromString:dateString];
-
return date;
-
}
