【问题标题】:How to convert NSDate to integer to pass PHP date() as unix timestamp?如何将 NSDate 转换为整数以将 PHP date() 作为 unix 时间戳传递?
【发布时间】:2012-10-30 22:58:11
【问题描述】:

我是一名 Objective-c 初学者,我被分配为我们的客户创建一个 iPhone 应用程序。我有一些Java背景,但几乎没有这个objective-c的经验,这是我第一次开发一个完整的应用程序......

无论如何,我目前正面临几个问题。其中一个问题是我需要从我的 iOS 应用程序中为 PHP 的 date 函数发送一个整数值。我一直在寻找解决方案,但他们都在处理相反的方式(int to NSDate),而不是 NSDate 到整数值。

我尝试了类似回答 here 的解决方案 但很明显它返回双精度,而不是整数...
this 但这无法获得System time

我知道我可以通过以下方式获取当前系统的 NSDate:

NSDate *theDay = [NSDate dateWithTimeIntervalSinceNow:[[NSTimeZone systemTimeZone] secondsFromGMT]];  

但我不知道如何将其转换为整数(或长整数)值。

我只需要获得与JavaSystem.currentTimeMillis() 相同的值。

另外,这是我第一次在 stackoverflow 中提问。因此,请让我知道在此处发布问题等时我应该做什么/不做什么。

谢谢。

【问题讨论】:

    标签: java objective-c integer nsdate


    【解决方案1】:

    要获取当前日期,你应该使用这个:

    NSDate *theDate = [NSDate date];
    

    要在 1970 年 1 月 1 日之后的几秒钟内得到它,作为双精度数,您可以使用:

    NSTimeInterval seconds = [[NSDate date] timeIntervalSince1970];
    

    要以毫秒为单位,只需将前一个值乘以 1000,然后让编译器将其转换为整数,无需任何额外代码:

    long long milliseconds = [[NSDate date] timeIntervalSince1970] * 1000;
    

    正如@HotLicks 指出的那样,System.currentTimeMillis() 是格林威治标准时间,如果您需要当地时间,您可以使用:

    long long milliseconds = ([[NSDate date] timeIntervalSince1970] 
                            + [[NSTimeZone defaultTimeZone] secondsFromGMT]) * 1000; 
    

    (我认为大多数网络服务都需要 GMT。)

    【讨论】:

    • 应该注意的是,NSDate 默认/设计是相对于 UTC/GMT 的,并且不包含时区信息。如果想要“本地”时间,则必须添加时区偏移量(适当地缩放到秒或毫秒)。
    • @HotLicks:还应该注意System.currentTimeMillis()(在java中)以UTC返回时间。 ;-)
    • @lnafziger 感谢您快速清晰的解释和解决方案!我实际上之前尝试过,但它没有从我们的 PHP 服务器返回正确的结果。但是,我现在在 Java 中运行了一些快速测试,我可以确认您的代码返回的结果与 Java 的 currentTimeMillis 相同。正如 Hot Licks 指出的那样,可能我需要自己添加时区偏移量(所以,对我来说,实际上没有“简单的方法”来“自动”包含时区,通过简单的单行方法来获取值)。感谢你们花时间阅读我的问题,并提供了很大的帮助!
    • @lnafziger -- 是的,我不记得 currentTimeMillis 是否是 UTC(虽然我应该记得,因为我实施过一次),但我也认为提醒浮士德不会有什么坏处时区问题。
    • @FaustV -- 实际上,您可能只需一行就可以全部搞定 -- 类似 [[NSDate date] timeIntervalSince1970] + [[NSTimeZone defaultTimezone] offsetInSecondsFromGMT] -- 尽管我可能有一些小问题。
    猜你喜欢
    • 2016-04-03
    • 2014-12-10
    • 2011-03-01
    • 1970-01-01
    • 2012-03-19
    • 2015-01-06
    • 2017-03-30
    相关资源
    最近更新 更多