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