ios-转换NSString到NSDate

问题描述

转换NSString到NSDate
转换两个string值到NSDate,一个日期,一个时间。日期转换正确,但是时间总是转错。并且xcode给出log错误信息。实现转换日期的代码如下,不知道时间怎么转换才对。

 NSDate * date;//Assume dateString is populated and of format NSString * dateString =@""2011-11-21 11:20"";NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];NSString *dateString =[NSString stringWithFormat:@""%@ %@"" socialEvent.SocialEventsDC_EventDatesocialEvent.SocialEventsDC_EventStartTime];NSLog(@""%@ %@""socialEvent.SocialEventsDC_EventDatesocialEvent.SocialEventsDC_EventStartTime);[dateFormatter setDateFormat:@""MM/dd/yyyy HH:mm a""];if (dateString != nil)  {    date = [dateFormatter dateFromString:dateString];//        [date release];}NSLog(@""%@""date);

log信息:

2013-04-25 10:45:04.417 BNI UK & Ire[450:5203] 01/20/2015 11:00 PM2013-04-25 10:45:09.679 BNI UK & Ire[450:5203] 2015-01-20 07:00:00 +0000

获得的时间总是7:00:00。正确的结果应该是11:00。

解决方案

你问题问的很好,里面涉及到了人们经常会犯的时区错误,看了下面的代码 你应该会对时区有所了解
如果还疑问可以特别问我,我考虑写一个关于这个时区方面文章解惑

  NSDate * date;  NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];  NSString *dateString = @""01/20/2015 11:00 PM"";  NSLog(@""%@"" dateString);  //这里有个小错误  // 使用 hh 代替 HH 因为一旦有了 a(AM/PM) 就不应该使用24小时制的HH而要用12小时制的hh,不然转换的时间会不准  [dateFormatter setDateFormat:@""MM/dd/yyyy hh:mm a""];  date = [dateFormatter dateFromString:dateString];  //这个返回的时间是基于GMT+00:00的时间,而我机器是GMT+08:00,所以时间要减8小时是2015-01-20 15:00:00 +0000  NSLog(@""timezone GMT+00:00 time: %@"" date);  //使用机器时区打印 date, 这样看到就是对的  NSLog(@""%@"" [date descriptionWithLocale:[NSLocale currentLocale]]);  //或者这样也是对的, 用使用默认时区的dateFormatter格式化 date 就会看到和之前一样的时间  NSLog(@""%@"" [dateFormatter stringFromDate:date]);  NSLog(@""default timezone:%@"" [NSTimeZone defaultTimeZone]);

运行结果
2013-04-28 00:40:59.889 NoARCTestProject[1123:c07] 01/20/2015 11:00 PM
2013-04-28 00:40:59.892 NoARCTestProject[1123:c07] timezone GMT+00:00 time: 2015-01-20 15:00:00 +0000
2013-04-28 00:40:59.894 NoARCTestProject[1123:c07] Tuesday January 20 2015 11:00:00 PM China Standard Time
2013-04-28 00:40:59.894 NoARCTestProject[1123:c07] 01/20/2015 11:00 PM
2013-04-28 00:40:59.895 NoARCTestProject[1123:c07] default timezone:Asia/Shanghai (GMT+08:00) offset 28800

时间: 2024-10-02 12:31:31

ios-转换NSString到NSDate的相关文章

iOS - OC NSString 字符串

前言 @interface NSString : NSObject <NSCopying, NSMutableCopying, NSSecureCoding> @interface NSMutableString : NSString 1.不可变字符串的创建 // 直接创建不可变字符串 /* 在 OC 中,使用 @"XXX" 格式定义的字符串,是保存在常量区的,只要内容相同,内存地址就一致 */ NSString *string1 = @"bei jing hua

iOS中 NSString的几种常用方法 韩俊强的博客

要把 "2011-11-29" 改写成 "2011/11/29"一开始想用ios的时间格式,后来用NSString的方法搞定. 1.创建NSString字符串 NSString 与 char* 最大的区别就是 NSString是一个objective对象,而char* 是一个字节数组.@+"字符串 " 这个符号为objective-c NSString 字符串常量的标准用法,char* 创建的时候 无需添加@ - (void)viewDidLoa

ios开发中时间转换的方法集锦

  这篇文章主要介绍了ios开发中时间转换的方法集锦,需要的朋友可以参考下 在开发iOS程序时,有时候需要将时间格式调整成自己希望的格式,这个时候我们可以用NSDateFormatter类来处理. 例如: //实例化一个NSDateFormatter对象 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; //设定时间格式,这里可以设置成自己需要的格式 [dateFormatter setDateFormat:@"yy

ios开发中时间转换的方法集锦_IOS

在开发iOS程序时,有时候需要将时间格式调整成自己希望的格式,这个时候我们可以用NSDateFormatter类来处理. 例如: //实例化一个NSDateFormatter对象 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; //设定时间格式,这里可以设置成自己需要的格式 [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; //用[NSDate d

iOS - OC NSDate 时间

前言 NSDate @interface NSDate : NSObject <NSCopying, NSSecureCoding> NSDate 用来表示公历的 GMT 时间(格林威治时间).是独立与任何历法的,它只是时间相对于某个时间点的时间差:NSDate 是进行日历计算的基础. NSDateComponents @interface NSDateComponents : NSObject <NSCopying, NSSecureCoding> NSDateComponent

iOS - Swift NSDate 时间

前言 NSDate public class NSDate : NSObject, NSCopying, NSSecureCoding NSDate 用来表示公历的 GMT 时间(格林威治时间).是独立与任何历法的,它只是时间相对于某个时间点的时间差:NSDate 是进行日历计算的基础. NSDateComponents public class NSDateComponents : NSObject, NSCopying, NSSecureCoding NSDateComponents 封装了

cocoa touch-ios:转换string到data

问题描述 ios:转换string到data 日期:"Mar 13, 2013 05:30pm".我想转换成NSDate对象. 代码如下,但是失败了. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"MMM:dd, YYYY hh:mm:aa"]; date=[dateFormatter dateFromString:dat

nsdate-iOS开发 字符串转化为NSDate格式比较时间

问题描述 iOS开发 字符串转化为NSDate格式比较时间 求助 "2015/10/15 9:00:00" 这是一个网络解析下来的时间我想将她转化为NSDate格式,然后和当前时间进行比较,请问我应该怎么做?在线等 解决方案 iOS ISO8601格式的时间日期字符串转换成NSDate字符串转NSDate时间IOS笔记:获取当前时间,并转化为一定格式字符串 解决方案二: #define kShortTimeFormat @"yyyy-MM-dd" //输入的日期字符

iOS开发中 常用枚举和常用的一些运算符(易错总结)

1.色值的随机值: #define kColorValue arc4random_uniform(256)/255.0 // arc4random_uniform(256)/255.0; 求出0.0~1.0之间的数字 view.backgroundColor = [UIColor colorWithRed:kColorValue green: kColorValue blue: kColorValue alpha: 0.5]; 2.定时器的使用: [NSTimer scheduledTimerW