4

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

4

1 回答 1

3

我想分享一下我的经验:

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

滴答声 = (MilliSeconds * 10000) + 621355968000000000

毫秒 =(滴答声 - 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];
}

同样,要从刻度转换为日期:

//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;
}
于 2012-09-13T16:33:31.000 回答