我在OS 3.x上有以下代码
NSString *stringDate = @"2010-06-21T20:06:36+00:00";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
NSDate *theDate = [dateFormatter dateFromString:stringDate];
NSLog(@"%@",[dateFormatter stringFromDate:theDate]);
Run Code Online (Sandbox Code Playgroud)
但现在在iOS4模拟器下的最新xcode 3.2.3中,变量theDate为零.
我查看了类引用,并没有看到任何已弃用或使用这些特定方法为iOS4实现不同的内容.我遗漏了什么?
我遇到了问题.我得到了12小时格式的传入时间字符串,我将它们转换为NSDate对象.当iPhone处于12小时格式时,没问题.但是当它采用24小时格式时,事情就出错了.以下是一些示例代码:
NSString *theTime = @"3:19 PM";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"h:mm a"]; // "3:19 PM"
NSDate *date = [formatter dateFromString:theTime];
NSString *theString = [formatter stringFromDate:date];
Run Code Online (Sandbox Code Playgroud)
24小时模式,日期是1970-01-01三点19分00秒,而theString是"3:19" -错误
在12小时模式中,日期是1970-01-01 15:19:00,而弦是"下午3:19" - 右
所以...问题1:为什么设备的24小时设置会覆盖我的日期格式化程序设置?
更重要的是,问题2:如何从12小时到24小时进行正确的转换?
我已经有代码来检测手机是否处于24小时模式,但除了在字符串中挖掘并用15交换3之外,似乎没有干净的方法来执行此操作.
我有以下代码.
NSDateFormatter *df = ...;
[df setTimeZone:[NSTimeZone defaultTimeZone]];
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"];
NSDate * date = [df dateFromString:date_string]; //here is the problem
Run Code Online (Sandbox Code Playgroud)
在24小时模式下一切都很好.在设备上设置12小时模式时,stringFromDate返回null.date_string的格式也始终相同,日期格式也一样.为什么会这样?
这是我发现自己花了几个小时才弄明白并因此想与你分享的事情.
问题是:如何确定特定日期的一年中的哪一天?
例如,1月15日是第15天,12月31日是第365天,而不是闰年.
似乎NSDateFormatteriOS11 中的默认行为已更改.此代码用于根据iOS11之前当前选择的iPhone/iPad语言工作和生成日期格式化程序:
_dateFormatterInstance = [[NSDateFormatter alloc] init];
_dateFormatterInstance.timeZone = [NSTimeZone systemTimeZone];
Run Code Online (Sandbox Code Playgroud)
看起来在iOS11中我们必须为它明确指定locale属性:
_dateFormatterInstance = [[NSDateFormatter alloc] init];
_dateFormatterInstance.timeZone = [NSTimeZone systemTimeZone];
_dateFormatterInstance.locale = [NSLocale localeWithLocaleIdentifier:[[NSLocale preferredLanguages] firstObject]];
Run Code Online (Sandbox Code Playgroud)
有人可以证实我的发现吗?
我是新手,对Objective-C非常不熟悉.有人可以帮我把它转换成Swift吗?我从Ray Wenderlich最好的iOS实践中获得了这段代码 - http://www.raywenderlich.com/31166/25-ios-app-performance-tips-tricks
你会把这段代码放在哪里?它会进入一个充满全局变量的类文件吗?
- (NSDateFormatter *)formatter {
static NSDateFormatter *formatter;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_formatter = [[NSDateFormatter alloc] init];
_formatter.dateFormat = @"EEE MMM dd HH:mm:ss Z yyyy"; // twitter date format
});
return formatter;
}
Run Code Online (Sandbox Code Playgroud) 在Objective-C中编写一个iPhone应用程序,我有一个字符串形式的日期(UTC格式,最后用Z表示零UTC偏移,或祖鲁时间),我需要将其解析为一个NSDate对象.
一点代码:
NSDateFormatter* df = [[NSDateFormatter alloc]init];
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"];
NSString* str = @"2009-08-11T06:00:00.000Z";
NSDate* date = [df dateFromString:str];
通过调试器运行,date最终nil!我假设它与我的日期格式字符串有关.Z在日期格式文字中,将日期格式设置为yyyy-MM-dd'T'HH:mm:ss.SSS'Z'.如何在IOS中获取NSArray本地化的星期几名称?
即不想在自己硬编码.有没有一种简单的方法可以从IOS课程中获得这个?我能想到的只是编写一个步骤7天然后使用格式化程序输出星期几的方法并收集这些方法
iphone localization internationalization nsdateformatter ios
在下面的图片中,您可以看到我编写的代码和所有变量的值:
class fun getCurrentShortDate() -> String {
var todaysDate = NSDate()
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy"
var DateInFormat = dateFormatter.stringFromDate(todaysDate)
return DateInFormat
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的那样,当前日期没有问题,但是当我尝试将NSDate更改为字符串时,它就不会这样做了.
我有一个日期时间格式的字符串:"YYYY-MM-DD HH:MM:SS".
我在我的源代码中使用它:
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"%e. %B %Y"];
NSString *test = [formatter stringFromDate:@"2010-01-10 13:55:15"];
Run Code Online (Sandbox Code Playgroud)
我想从"2010-01-10 13:55:15"转换为"2010年1月10日".但我的实施不起作用.
这有什么不对?
非常感谢提前和最诚挚的问候.
更新的源代码:
[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4];
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"%Y-%m-%d %H:%M:%S"];
NSString *test1 = [formatter stringFromDate:@"2010-01-10 13:55:15"];
NSDateFormatter *formatter1 = [[[NSDateFormatter alloc] init] autorelease];
[formatter1 setDateFormat:@"%d. %M4 %Y"];
NSString *test2 = [formatter1 stringFromDate:test1];
Run Code Online (Sandbox Code Playgroud) nsdateformatter ×10
iphone ×6
nsdate ×5
objective-c ×4
ios ×3
date ×2
swift ×2
cocoa-touch ×1
datetime ×1
ios11 ×1
ios4 ×1
locale ×1
localization ×1
time ×1
utc ×1