我是Objective-c的初学者,我被分配为我们的客户创建iPhone应用程序。我有Java的背景知识,但是几乎没有这个Objective-C的经验,这是我第一次开发完整的应用程序...
无论如何,我目前遇到很多问题。这些问题之一是我需要从我的iOS应用程序为PHP的date函数发送一个整数值。我一直在寻找解决方案,但是所有这些方法都以相反的方式(NSDate的int)而不是NSDate的整数值。
我尝试了像这里回答的解决方案
但很明显,它返回双精度值,而不是整数...
或这个
但这无法获得System time。
我知道我可以通过以下方式获取当前系统的NSDate:
NSDate *theDay = [NSDate dateWithTimeIntervalSinceNow:[[NSTimeZone systemTimeZone] secondsFromGMT]];
但是我不知道如何将其转换为整数(或长整数)值。
我只需要获得与使用System.currentTimeMillis()进入Java相同的值即可。
此外,这是我第一次在stackoverflow中提出问题。因此,在此处发布问题时,请让我知道我是否应该做/不应该做的事情。
谢谢。
要获取当前日期,您应该使用以下命令:
NSDate *theDate = [NSDate date];
要从1970年1月1日起以秒为单位获得它,请使用:
NSTimeInterval seconds = [[NSDate date] timeIntervalSince1970];
要以毫秒为单位,只需将前一个值乘以1000,然后让编译器将其转换为整数即可,而无需任何其他代码:
long long milliseconds = [[NSDate date] timeIntervalSince1970] * 1000;
正如@HotLicks指出的那样,当System.currentTimeMillis()在格林尼治标准时间(GMT)中时,如果需要当地时间,则可以使用:
long long milliseconds = ([[NSDate date] timeIntervalSince1970]
+ [[NSTimeZone defaultTimeZone] secondsFromGMT]) * 1000;
(我认为大多数Web服务都需要GMT。)
应该注意的是,默认情况下/设计上,NSDate是相对于UTC / GMT的,并且不包含任何时区信息。如果需要"本地"时间,则必须添加时区偏移量(适当地缩放为秒或毫秒)。
@HotLicks:还应注意,System.currentTimeMillis()(在Java中)以UTC返回时间。 ;-)
@lnafziger谢谢您的快速清晰的解释和解决方案!我实际上曾经尝试过,但是它没有从我们的PHP服务器返回正确的结果。但是,我现在使用Java运行一些快速测试,并且可以确认您的代码返回的结果与Java的currentTimeMillis相同。正如Hot Licks指出的那样,可能我需要自己添加时区偏移量(因此,对我而言,实际上没有"简单方法"以简单的单行方法"自动"获得包含时区的值)。谢谢你们俩花时间阅读我的问题,并提供很大的帮助!
@lnafziger-是的,我不记得currentTimeMillis是否为UTC(尽管我应该知道,因为我实施了一次),但我也想起提醒Faust时区问题不会太麻烦。
@FaustV-实际上,您可能只需一行就可以完成所有操作-类似于[[NSDate date] timeIntervalSince1970] + [[NSTimeZone defaultTimezone] offsetInSecondsFromGMT]-尽管我在那里可能有些错误。
是的,您击败了我……当我回到计算机时,我打算将其发布。 :)我会把它添加到我的答案中,以便将来对人们很清楚。