5

UIDatePicker を使用していますが、このデータを MonoTouch の System.DateTime 値に変換する際に問題が発生しています。NSDate から DateTime への変換には問題がありますが、これはほとんど解決しましたが、同じ夏時間期間外の日付を選択すると、1 時間遅れることがわかります。たとえば、2010 年 1 月の日付を選択すると、オフセットの問題が発生します。

私がやりたいのは、ユーザーが UIDatePicker から日付/時刻を選択したときに、NSDate の年、月、日、時、および分の値を取得し、それらの値を使用して新しい System.DateTime を作成することです。 ' UIDatePicker でユーザーが見るのとまったく同じ日付値を取得することが常に保証されます。

NSDate 値をさまざまな日付部分に分解するにはどうすればよいですか?

ありがとうございました。

4

3 に答える 3

4

サマータイムの問題を解決する簡単な方法は、タイム ゾーンを GMT に設定することです。次に、UIDatePicker は夏時間を無視します。

    _datePicker.TimeZone = NSTimeZone.FromAbbreviation("GMT");

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

    // Set date to the date picker (_date is a DateTime with time part 0:00:00):
    _datePicker.Date = DateTime.SpecifyKind(_date, DateTimeKind.Utc);

    // Get the date from the date picker:
    _date = DateTime.SpecifyKind(_datePicker.Date, DateTimeKind.Unspecified);

これは、個々の日、月、年の値を取得するよりも簡単で信頼性が高くなります。

于 2011-03-18T23:32:02.557 に答える
1

これは、のインスタンスを使用して実行できるようですNSDateComponents以下は、日付コンポーネントとカレンダー単位からコピーされました。

日付を構成要素に分解するには、NSCalendarメソッドcomponents:fromDate:を使用します。日付自体に加えて、NSDateComponentsオブジェクトで返されるコンポーネントを指定する必要があります。このために、このメソッドはカレンダー単位定数で構成されるビットマスクを取ります。関心のあるコンポーネント以外のコンポーネントを指定する必要はありません。リスト3は、今日の日と平日を計算する方法を示しています。

リスト3 日付のコンポーネントの取得

NSDate *today = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc]  initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *weekdayComponents = [gregorian components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:today];
NSInteger day = [weekdayComponents day];
NSInteger weekday = [weekdayComponents weekday];
于 2010-08-03T00:20:45.950 に答える
1
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);
}

上記のコードを使用して、NSDate を DateTime に変換し、.Net World で通常行うように行うことができます :) 次に > DateTimeToNSDate を使用すると、NSDate に戻すことができます

お役に立てれば

アレックス

于 2011-02-03T16:51:02.097 に答える