- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,我有一个格式为 YYMMDDHHMMSS 的字符串,并且我正在尝试(努力)从中获取正确的 NSDate 对象。
这是我的代码:
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
[format setDateFormat:@"yyMMddHHmmss"];
NSDate *date = [format dateFromString:@"140904123421"];
NSLog(@"日期: %@", 日期);
我遇到了这样的怪事:
DATE: 2014-09-04 17:04:21 +0000
我检查过这个table我的格式化程序似乎是正确的,我也尝试删除语言环境,但我仍然得到错误的日期。那么,是否有可能回到正确的时间?
谢谢。
最佳答案
正如您问题的评论中所指出的,您的 NSDate
是正确的; NSDate
始终将其时间存储在 GMT
中。默认情况下,当 NSDateFormatter
解析您的日期时,它会将您的本地时区转换为 GMT
,以便存储在生成的 NSDate
对象中的内容是一致的(它实际上比那更微妙,但你可以那样想)。由于您的时区是 GMT-04:30
,这意味着它将为您的时间增加 4 小时 30 分钟,使 2014-09-04 12:34:21 GMT-4: 30
= 2014-09-04 17:04:21 GMT
(正如@MartinR 指出的)。
根据您的评论,听起来您需要以 yyyy-MM-dd HH:mm:ss
格式将此日期存储在数据库中,本地时间 .最简单的方法是简单地使用第二个 NSDateFormatter
:
NSDateFormatter *formatOut = [[NSDateFormatter alloc] init];
[formatOut setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *dateString = [formatOut stringFromDate: date];
由于 NSDateFormatter
将默认使用您本地的时区,因此应该将 date
从 GMT
“转换”回 GMT- 4:30
并将 dateString
设置为 2014-09-04 12:32:21
。
综上所述,在本地时区存储日期几乎总是一个坏主意。时区是棘手的事情,所以最好始终以 GMT
/UTC
存储日期并对其进行任何计算,然后仅在显示时将其转换为本地时间它给你的用户。如果您时区以外的人访问您的数据、您的时区规则发生变化(发生的频率比您想象的要频繁)、您需要将您的日期传递给某些外部服务/应用等,这将为您省去很多麻烦。
关于iOS NSDate 和 NSDateFormatter 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25671423/
我在 iOS 6 上使用 xcode 4.5(4G182)。NSDateFormatter 在 iOS 6 中显示错误的年份,如何解决? NSDateFormatter *dateFormatter
我在 iOS 6 上使用 xcode 4.5(4G182)。NSDateFormatter 在 iOS 6 中显示错误的年份,如何解决? NSDateFormatter *dateFormatter
我正在尝试创建一个 TableViewCell,就像 iPhone 上的 Notes 应用程序中的那样。标题在左侧,时间在右侧,紧挨着披露者指示符。 看起来像那样的 tableView。我知道我必须使
我有一个用于“从”和“到”字段的日期选择器,我想要减法的结果。例如:toValue-fromValue,结果以小时为单位。如何做到这一点? 最佳答案 可以使用timeIntervalSinceDate
我简单地尝试重新格式化日期: NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; NSDate *date = [[NSDat
在 Instrument 的帮助下,我发现以下代码段存在内存泄漏。仪器显示 NSDateFormatter 此处泄漏内存。 - (NSDate*) dateSelected{ if(selectedD
当用户未使用公历作为 iPhone 的默认日历时,我在使用 NSDateFormatter 时遇到问题。 NSString *testString = @"2011-01-14"; NSDateFor
以下日期/时间的 NSDateFormatter 字符串是什么:02/22/2011 10:43:00 AM 基本上我想要的是读取字符串02/22/2011 19:00:23 PM,将其转换为NSDa
我正在尝试创建一个格式化程序,将显示的日期格式转换为 NSDate 对象: NSString *dateStr = @"2010-06-21T19:00:00-05:00"; NSDateFormat
我有一个带有 NSDateFormatter 的 NSTextField。格式化程序接受“mm/dd/yy”。 可以自动补全日期吗?因此,用户可以输入“mm”,格式化程序将完成当前月份和年份。 最佳答
我正在从表示日期的文本中提取字符串。它们看起来像这样: Monday August 16, 2010 05:28 AM EST 我正在尝试使用 NSDateFormatter 来解析它们。我已将其格式
我有一个应用于 NSTextFieldCell 的 10.4 样式日期格式化程序。我调用 setTwoDigitStartDate: (尝试使用纪元日期和“引用”日期),但是当我输入带有两位数年份的日
在打开 doesRelativeDateFormatting 的情况下使用 NSDateFormatter 时,所有相对格式似乎都相对于当前系统时间。我想使用相对格式设置日期,例如“今天”或“明天”,
我想从日期获取 NSString,日期格式如下: MMEEEY ww 问题出在“ww”,即一年中的第几周。我必须将此格式与从后台获取的另一种格式进行比较。但后台的第一个工作日是星期一,而 iOS 的第
我的日期格式化程序返回nil表示一个特定日期:“1998年3月20日”。 + (NSDate*)dateFromString:(NSString*)date { NSDateFormatter
我知道这篇文章可能一式三份,但是到目前为止,关于现有线程的所有答案都没有帮助我。 我试图从字符串中获取NSDate值,但结果一直是nil。这是我的代码 NSString * dateString =
Crashlytics服务报告一些崩溃(大约30个崩溃/ 18个用户进行1000个 session ) 这是我的代码: var brutDate: String = "" brutDate () (
我正在尝试解析这个日期时间戳 开始串: Wed, 11 Sep 2013 08:51:41 EEST 这个问题只有 EEST , 我试过 z 或 zzz 或 V,什么也没发生。日期格式化程序始终为 N
这个问题在这里已经有了答案: NSDate Format outputting wrong date (5 个回答) 8年前关闭。 我正在使用下面的代码,但它给了我提前一天 date 。 示例 :将输
使用设备上用户的currentLocale,我想要一种与NSDateFormatterFullStyle生成的日期格式完全相同的日期格式减去年份: [dateFormatter setDateStyl
我是一名优秀的程序员,十分优秀!