NSDate to Tick转换

时间:2012-09-13 16:33:31

标签: ios objective-c type-conversion nsdate

我想将日期(nsdate)转换为刻度值。自格林尼治标准时间1月1日00:00:00起,Tick值为(1 Tick = 0.1微秒或0.0001毫秒)。 NSDate具有timeIntervalSince1970之类的功能。那么,我该如何转换呢?

1 个答案:

答案 0 :(得分:3)

我想分享一下我的经验:

我试图找到01/01/0001的秒数,然后乘以10,000,000。但是,它给了我错误的结果。因此,我发现01/01/1970是01/01/0001的621355968000000000个刻度,并使用以下公式以及NSDate的timeIntervalSince1970函数。

Ticks =(MilliSeconds * 10000)+ 621355968000000000

MilliSeconds =(Ticks - 621355968000000000)/ 10000

结果如下:

+(NSString *) dateToTicks:(NSDate *) date
{
    NSString *conversionDateStr = [self dateToYYYYMMDDString:date];
    NSDate *conversionDate = [self stringYYYYMMDDToDate:conversionDateStr];
    NSLog(@"%@",[date description]);
    NSLog(@"%@",[conversionDate description]);
    double tickFactor = 10000000;
    double timeSince1970 = [conversionDate timeIntervalSince1970];
    double doubleValue = (timeSince1970 * tickFactor ) + 621355968000000000;
    NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease];
    [numberFormatter setNumberStyle:NSNumberFormatterNoStyle];
    NSNumber *nsNumber = [NSNumber numberWithDouble:doubleValue];
    return [numberFormatter stringFromNumber:nsNumber];
}

同样,要从tick转换为日期:

//MilliSeconds = (Ticks - 621355968000000000) / 10000
+(NSDate *) ticksToDate:(NSString *) ticks
{
    double tickFactor = 10000000;
    double ticksDoubleValue = [ticks doubleValue];
    double seconds = ((ticksDoubleValue - 621355968000000000)/ tickFactor);
    NSDate *returnDate = [NSDate dateWithTimeIntervalSince1970:seconds];
    NSLog(@"%@",[returnDate description]);
    return returnDate;
}