长日期(UNIX 日期)问题
Long Date (UNIX Date) issues
问题如下:
应用程序的快速详细信息:根据日期对数据进行排序(升序)。
Web 服务的 UNIX 日期/长日期,格式为 JSON(13 位数字)。解析长日期时,我得到一个无效的日期值。
长日期:1428498595000
转换日期:Sun, 26 Apr 47237 13:16:40(解析后)
[通知年份]
使用在线转换器时(示例):http://www.onlineconversion.com/unix_time.htm,将再现相同的输出。
我的目的是让日期按升序排序,但不幸的是,由于显示的年份无关紧要,因此无法排序。
长日期 1428498595(在手动删除三个零以在网站上进行测试后):2015 年 4 月 8 日,星期三 13:09:55 GMT(这是需要显示的正确日期)
任何人都可以帮助我了解如何手动删除最后三个零吗?
[将解析后的数据存储在SQLite中,然后在UITableView中生成存储的数据]
这是在 AppDelegate
+(NSString * )convertUnixTime_to_SytemTime :(NSTimeInterval )timeInterval
{
NSDate * convertedDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"YYYY-MM-DD";
NSTimeZone *localTime = [NSTimeZone systemTimeZone];
[dateFormatter setTimeZone:localTime];
NSString *timeStamp = [dateFormatter stringFromDate:convertedDate];
return timeStamp;
}
这在代码里
data.News_LastModifiedDate = [AppDelegate convertUnixTime_to_SytemTime:[[subcomponents objectAtIndex:2] doubleValue]];
在此先致谢。
您的时间戳以毫秒为单位。只需将其除以 1000 即可得到正确的 date/time.
data.News_LastModifiedDate = [AppDelegate convertUnixTime_to_SytemTime:[[subcomponents objectAtIndex:2] doubleValue]/1000];
应该适合你。
date/time 是自 UNIX 纪元以来的毫秒数,而不是秒数。您可以除以 1000.0 以保留小数秒(如果它们曾经出现):
NSTimeInterval seconds = (NSTimeInterval)1428498595000 / 1000.0;
编辑。要解决您问题的其他方面:
Storing the parsed data in SQLite and then producing the stored data
in UITableView
按原样存储;作为 64 位 int
.
+(NSString * )convertUnixTime_to_SytemTime :(NSTimeInterval )timeInterval
该方法不会将UNIX时间转换为系统时间;它将日期格式化为字符串(从外观上看是错误的)。算了,只用第一行代码:
NSDate * convertedDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
其中timeInterval
是上面转换成秒的原始数字。您唯一需要将日期作为字符串的时间是在呈现期间,而不是在处理期间。
每当您阅读 JSON 数据时,应该有一个 API 描述告诉您什么数据以何种形式传递。你会阅读 API 描述并做任何需要做的事情。如果没有API描述,你就随便吧。
当您从 JSON 数据中读取日期时,您应该首先将找到的任何内容转换为 NSDate*。 JSON 没有内置日期类型。它有一个标准的日期格式,使用 RFC3339,但你的 JSON 不这样做。显然它使用自 1970 年以来以毫秒为单位的 UTC,存储为整数。 JSON 解析器会将此 return 作为 NSNumber。幸运的是,这很容易处理:
NSNumber* dateAsNumber = "whatever is needed to extract the integer";
NSTimeInterval dateAsInterval = [dateAsNumber doubleValue] / 1000;
NSDate* dateAsDate = [NSDate dateWithTimeIntervalSince1970: dateAsInterval];
您不应该将 NSDate 转换为其他任何东西。 NSDate 是处理 iOS 日期的标准类型。 CoreData 会处理它。如果直接使用 SQL ,在存储到数据库之前和从数据库加载之后转换它,并在其他地方使用 NSDate。
顺便说一句。什么是系统时间?如果你使用像 convertUnixTime_to_SytemTime 这样的方法名称,我会非常担心,因为没有两个人会同意系统时间是什么。而且您的方法没有 return 系统时间,它 return 是转换为字符串的东西。
问题如下: 应用程序的快速详细信息:根据日期对数据进行排序(升序)。
Web 服务的 UNIX 日期/长日期,格式为 JSON(13 位数字)。解析长日期时,我得到一个无效的日期值。
长日期:1428498595000 转换日期:Sun, 26 Apr 47237 13:16:40(解析后) [通知年份]
使用在线转换器时(示例):http://www.onlineconversion.com/unix_time.htm,将再现相同的输出。 我的目的是让日期按升序排序,但不幸的是,由于显示的年份无关紧要,因此无法排序。
长日期 1428498595(在手动删除三个零以在网站上进行测试后):2015 年 4 月 8 日,星期三 13:09:55 GMT(这是需要显示的正确日期)
任何人都可以帮助我了解如何手动删除最后三个零吗? [将解析后的数据存储在SQLite中,然后在UITableView中生成存储的数据]
这是在 AppDelegate
+(NSString * )convertUnixTime_to_SytemTime :(NSTimeInterval )timeInterval
{
NSDate * convertedDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"YYYY-MM-DD";
NSTimeZone *localTime = [NSTimeZone systemTimeZone];
[dateFormatter setTimeZone:localTime];
NSString *timeStamp = [dateFormatter stringFromDate:convertedDate];
return timeStamp;
}
这在代码里
data.News_LastModifiedDate = [AppDelegate convertUnixTime_to_SytemTime:[[subcomponents objectAtIndex:2] doubleValue]];
在此先致谢。
您的时间戳以毫秒为单位。只需将其除以 1000 即可得到正确的 date/time.
data.News_LastModifiedDate = [AppDelegate convertUnixTime_to_SytemTime:[[subcomponents objectAtIndex:2] doubleValue]/1000];
应该适合你。
date/time 是自 UNIX 纪元以来的毫秒数,而不是秒数。您可以除以 1000.0 以保留小数秒(如果它们曾经出现):
NSTimeInterval seconds = (NSTimeInterval)1428498595000 / 1000.0;
编辑。要解决您问题的其他方面:
Storing the parsed data in SQLite and then producing the stored data in
UITableView
按原样存储;作为 64 位 int
.
+(NSString * )convertUnixTime_to_SytemTime :(NSTimeInterval )timeInterval
该方法不会将UNIX时间转换为系统时间;它将日期格式化为字符串(从外观上看是错误的)。算了,只用第一行代码:
NSDate * convertedDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
其中timeInterval
是上面转换成秒的原始数字。您唯一需要将日期作为字符串的时间是在呈现期间,而不是在处理期间。
每当您阅读 JSON 数据时,应该有一个 API 描述告诉您什么数据以何种形式传递。你会阅读 API 描述并做任何需要做的事情。如果没有API描述,你就随便吧。
当您从 JSON 数据中读取日期时,您应该首先将找到的任何内容转换为 NSDate*。 JSON 没有内置日期类型。它有一个标准的日期格式,使用 RFC3339,但你的 JSON 不这样做。显然它使用自 1970 年以来以毫秒为单位的 UTC,存储为整数。 JSON 解析器会将此 return 作为 NSNumber。幸运的是,这很容易处理:
NSNumber* dateAsNumber = "whatever is needed to extract the integer";
NSTimeInterval dateAsInterval = [dateAsNumber doubleValue] / 1000;
NSDate* dateAsDate = [NSDate dateWithTimeIntervalSince1970: dateAsInterval];
您不应该将 NSDate 转换为其他任何东西。 NSDate 是处理 iOS 日期的标准类型。 CoreData 会处理它。如果直接使用 SQL ,在存储到数据库之前和从数据库加载之后转换它,并在其他地方使用 NSDate。
顺便说一句。什么是系统时间?如果你使用像 convertUnixTime_to_SytemTime 这样的方法名称,我会非常担心,因为没有两个人会同意系统时间是什么。而且您的方法没有 return 系统时间,它 return 是转换为字符串的东西。