8

Objective C でエポックからの秒数を取得しようとすると、奇妙な動作が見られます。これは次のとおりです。

NSString *nowTimestamp = [NSString stringWithFormat:@"%d", 
                             [[NSDate date] timeIntervalSince1970]];

現在のタイムスタンプが 1243555623 (05/28/2009 @ 7:08pm EST) であるべき場合、15907296 を出力します。iPhone のシステム時刻は正確です。私は自分が間違っていることを一生理解できません。推奨事項はありますか?

4

3 に答える 3

31

timeIntervalSince1970 は、double の typedef である NSTimeInterval を返します。%d は double を出力するための適切なフォーマッターではありません (%f が必要です)。

于 2009-05-28T23:34:51.507 に答える
5

からの戻り値[[NSDate date] timeIntervalSince1970];は double であるため、これを試すことができます。

NSString *nowTimestamp = [NSString stringWithFormat:@"%f", 
                         [[NSDate date] timeIntervalSince1970]];
于 2009-05-28T23:39:33.200 に答える
1

NSDateからの結果が 10 進数の int であると確信していますか? ドキュメントによると、それはダブルです。キャストを試すことができます。

また、実際の値の代わりにポインター値が返されることがあります。何かが隠れている場合は、NSNumberを使用するintValuedoubleValue、アドレスにあるものの実際の内容を取得する必要があります。

于 2009-05-28T23:23:59.720 に答える