13

私はUIDatePickermm/dd/yy を持っています。正常に動作しますが、問題が 1 つあります。日付を設定minimummaximum、ユーザーが禁止された日、月、または年を選択しようとすると、[datePicker date]プロパティが正しく動作しなくなります。current day - 1またはcurrent month - 1またはを返しますcurrent year - 1。写真を追加しましたので、状況をご確認ください。

正しい日付 これは正しい
間違った日付 これは間違っている (禁止された日付を選択した後)

誰かが知っていますか、どうすればこれを修正できますか? ありがとう !

UPD: コード

[self.myDatePicker setMinimumDate:[NSDate date]];
[self.myDatePicker setMaximumDate:[[NSDate date] addTimeInterval:2 * 365.25 * 24 * 60 * 60]]; // to get upto 5 years
NSDate * now = [[NSDate alloc] init];
[self.myDatePicker setDate: now animated: YES];

self.myDatePicker.timeZone = [NSTimeZone localTimeZone];
self.myDatePicker.calendar = [NSCalendar currentCalendar];
4

9 に答える 9

13

タイムゾーンを設定するコードを 1 行追加するだけです。

self.datePicker.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];

0 は GMT 00 です。タイムゾーンに合わせて追加してください。

于 2016-11-09T16:09:50.617 に答える
6

私の解決策は、NSDatesがUTCで機能するため、返された日付を午前12:00に設定することでした

NSDate * adjustedDate = [[NSCalendar currentCalendar] dateBySettingHour:12 minute:0 second:0 ofDate:sender.date options:0];

また、日付の計算には、NSCalenderメソッドを使用する必要があります。addTimeInterval

于 2014-10-30T13:08:11.163 に答える
5

大きな文字で間違った書式記号「YYYY」を使用していないか確認してください。それらを「yyyy」に置き換えます。

于 2013-01-07T17:21:34.657 に答える
5

それは間違いなく、タイムゾーンおよび/または夏時間に関するものです。しかし、コードは (インターバル以外では) きれいに見えるので、非常に微妙である必要があります。あなたがロシアにいるかどうかについての私の質問に:

今年、クレムリンは、サマータイムを永久に維持することについて、いくつかの変更を行った。実際、彼らが最終的に何を決定したのかはわかりません。しかし、Cocoa では正しく反映されていない可能性があります。ビデオWWDC 2011 ビデオ「セッション 117 - カレンダー計算の実行」では、プレゼンターは、そのようなことが起こり得るとさえ述べています。

手動で時刻を正午に設定して日付を操作するようにしてください。これにより、このような混乱を避けることができます。


世界は、iOS 6 で同様の誤動作を確認しました: DND-Always-Active バグです。これは日付形式が間違っていたに違いない (YYYYではなくyyyy)


また、最初にピッカーで timezone プロパティを設定し、手動でインスタンス化されたグレゴリオ暦を割り当ててみてください。

于 2013-01-07T17:46:02.880 に答える
0

TimeZoneが原因かもしれません...

タイムゾーンを設定します。

于 2013-01-07T17:15:09.420 に答える
-1
Boolean futureevent;
- (void)viewDidLoad
{
 futureevent = false;
}

int intervall = (int) [currentdate timeIntervalSinceDate: datePicker.date] / 60;

if (intervall < 1200 && intervall > 0)
{
    futureevent = true;
    NSDate *newDate1 = [datePicker.date dateByAddingTimeInterval:60*60*24*1];
    birthdate = [newDate1.description substringToIndex:spaceRange.location];
}
else
{
    if (futureevent)
    {
        NSDate *newDate1 = [datePicker.date dateByAddingTimeInterval:60*60*24*1];
        birthdate = [newDate1.description substringToIndex:spaceRange.location];
    }
    else
    {
        birthdate = [datePicker.date.description substringToIndex:spaceRange.location];
    }
}
于 2013-06-23T11:34:30.913 に答える