15

日付文字列を特定の NSDate (1981 年 7 月 1 日など) に変換しようとしていますが、日付を設定する方法がわかりません。これを達成する方法を知っている人はいますか?おそらく、DateTime オブジェクトを NSDate に変換しますか?

4

5 に答える 5

25

最も簡単な方法は、DateTime から設定することです。

改訂: NSDate 変換演算子は明示的になり、暗黙的ではなくなりました! 以下の例を更新しました。

NSDate プロトタイプを見ると、次の 2 つの演算子が見つかります。

    public static explicit operator NSDate(DateTime dt);
    public static explicit operator DateTime(NSDate d);

この 2 つが変換を行います。

NSDate と DateTime の間の明示的な変換は非常に優れていますが、NSDate は常に UTC 時刻であり、DateTime はデフォルトで DateTimeKind.Unspecified (データベースから読み取る場合) または DateTimeKind.Locale (DateTime.Today で設定する場合) に設定されていることに注意する必要があります。 )。複雑なタイム ゾーンの計算を行わずに変換する最善の方法は、正しい DateTimeKind を強制することです。

    // Set NSDate:
    DateTime date = DateTime.Parse("1981-07-01")
    NSDate nsDate = (NSDate)DateTime.SpecifyKind(date, DateTimeKind.Utc);

    // Get DateTime from NSDate:
    date = DateTime.SpecifyKind((DateTime)nsDate, DateTimeKind.Unspecified);
于 2011-03-20T16:18:12.540 に答える
9
public static DateTime NSDateToDateTime(MonoTouch.Foundation.NSDate date)
{
    return (new DateTime(2001,1,1,0,0,0)).AddSeconds(date.SecondsSinceReferenceDate);
}

public static MonoTouch.Foundation.NSDate DateTimeToNSDate(DateTime date)
{
    return MonoTouch.Foundation.NSDate.FromTimeIntervalSinceReferenceDate((date-(new DateTime(2001,1,1,0,0,0))).TotalSeconds);
}

これは役立つはずです

アレックス

于 2011-02-03T16:47:35.137 に答える
2

これを試して:

private static NSDate DateTimeToNSDate(DateTime date)
    {
        NSCalendar calendar = NSCalendar.CurrentCalendar;
        NSDateComponents comps = new NSDateComponents();
        comps.Day = date.Day;
        comps.Month = date.Month;
        comps.Year = date.Year;
        comps.Minute = date.Minute;
        comps.Hour = date.Hour;

        return calendar.DateFromComponents(comps);
    }
于 2016-07-03T18:24:17.557 に答える
-2

NSDateFormatterクラスを見たい:)

コードは次のようになります。. .

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMM dd, yyyy HH:mm"];

NSDate *parsed = [formatter dateFromString:dateString];

S

PS例は、この質問から自由にコピーされました:)

于 2010-01-27T17:22:40.697 に答える