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