4

日付 (nsdate) をティック値に変換したかったのです。ティック値は、0001 年 1 月 1 日 00:00:00 GMT からの (1 ティック = 0.1 マイクロ秒または 0.0001 ミリ秒) です。NSDate には timeIntervalSince1970 のような関数があります。では、どのように変換すればよいでしょうか。

4

1 に答える 1

3

私の経験を共有したいと思います:

01/01/0001 からの秒数を見つけて、10,000,000 を掛けてみました。しかし、それは私に間違った結果をもたらしました。したがって、1970/01/01 は 0001/01/01 から 621355968000000000 ティックであることがわかり、NSDate の timeIntervalSince1970 関数と共に次の式を使用しました。

ティック = (ミリ秒 * 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 に答える