如何获取时间戳的int值,包括目标c中的毫秒数

问题描述 投票:0回答:3
 NSNumber * uniqueId = [NSNumber numberWithInt:([[NSDate date] timeIntervalSince1970])];

毫秒不包含在上面的代码中。如果我使用如下代码,则打印负值。

NSNumber * uniqueId1 = [NSNumber numberWithInt:([[NSDate date] timeIntervalSince1970] * 1000)];

我们可以得到毫秒的时间戳作为int ????

ios objective-c int nsdate nsnumber
3个回答
1
投票

@AnjaniG你可以使用其中一个..

NSString *strTimeStamp = [NSString stringWithFormat:@"%f",[[NSDate date] timeIntervalSince1970] * 1000];
int timestamps = [strTimeStamp intValue];
NSLog(@"number int = %d",timestamps);

0
投票

你不应该使用Int[[NSDate date] timeIntervalSince1970] * 1000INT_MAX大。您应该使用long long来存储值。

NSNumber * uniqueId1 = [NSNumber numberWithLongLong:([[NSDate date] timeIntervalSince1970] * 1000)];


0
投票

问题是您正在将浮点转换为整数。

作为per the documentationtimeIntervalSince1970返回NSTimeIntervalwhich is a double,而不是整数。

  1. 在您的第一个代码示例中,您实际上是通过强制转换丢弃了毫秒数。
  2. 在第二个代码示例中,您将溢出整数。将该值乘以1000后,它太大而无法放入整数。

最后,你只是做了太多的代码,你不应该真的担心这个。

NSTimeInterval interval = [NSDate date].timeIntervalSince1970;
NSNumber *timestamp = @(interval * 1000.);

在这里,我使用正确记录的NSTimeInterval类型。然后我将它乘以1,000以将秒数更改为毫秒。最后,我使用Clang literal syntax指示编译器创建适当的NSNumber

© www.soinside.com 2019 - 2024. All rights reserved.