12

そこで、電話会議のスケジューリングと自動ダイヤル用のアプリケーションの 1 つに UIDatepicker を実装しました...テスト中に、日付が 12 月 26 日から 12 月 27 日にロールオーバーすると、年が 2010 に変わることに気付きました。

私はそれを2011年にロールフォワードしました...そして12月25日が26日に変わると変更されます....しかし待ってください... 2012年には、12月31日から1月1日に正しくロールオーバーします...そして2013 年の 29 日から 30 日。私が気付いていない何らかの天文学的現象があるのでしょうか、それとも Apple は私が知らないクレイジーな Heechee カレンダーで動いているのでしょうか? カレンダーアプリは正常に動作...

最も可能性の高い説明は、あまりにも明白な何かを見逃しているため、気付いたときに自分を叩いてしまうということです。でもねえ、私は寝ていません...うわー、2日か3日か覚えていません。同情して、ここで私を助けてください。

更新: 単純なものではなかったのかもしれません。ここでまだ答えを探しています!これを経験したのは本当に私だけですか?? 12 月末になると、同じ障害にぶつかる人が増えるに違いありません。

更新 2: 誰か? まだ探しても見つからない…

UPDATE3: まだ解決策が見つかりません。来て!これは面白いパズルです!

UPDATE4: まだ答えが見つかりません。アプリを送信しました。現在、アプリストアにあります。アプリを更新できるように、この問題が解決されることを引き続き確認したいと思います。

4

3 に答える 3

3

この問題が発生する可能性があります。月の最終週で、当月の残り日数が 7 日未満の場合、API がその週を翌月の第 1 週として扱った可能性があります。2012 年 12 月の最終週はすでに 7 日あるため、その月は問題ありません。

ここで同じ問題が発生していましたが、解決しました。

- (int) currentWeekOfMonth
{
    return CFCalendarGetOrdinalityOfUnit (
           CFCalendarCopyCurrent(),
           kCFCalendarUnitWeek,
           kCFCalendarUnitMonth,
           [self absoluteTime]);
}

私の要件は、週番号を表示することです。このために、月の最初の週の週番号を計算し、これを月の合計週数に追加します。

int currentWeekNumberInYear =   [_calendarInfo currentWeekOfYear];
int currentWeekNumberInMonth = [_calendarInfo currentWeekOfMonth];
currentWeekNumberInYear = currentWeekNumberInYear-currentWeekNumberInMonth +1;
currentWeekNumberInYear = currentWeekNumberInYear<0 ? (NSInteger)[_calendarInfo weeksInMonth] ==5 ?49:48   : currentWeekNumberInYear;

お役に立てば幸いです。

于 2009-12-29T15:36:27.260 に答える
3

これを引き起こした NSDateFormatter の設定に使用された日付フォーマット文字列が判明しました。

「yyyy」は 4 桁の年に対応し、YYYY は年の第 1 週の日曜日から始まる年に対応します。なぜこれが必要なのかは誰にもわかりませんが、Apple がフォーマット指定子のリストへのリンクを提供してくれると本当に助かりますが、それで終わりです。

フォーマット文字列に小文字の年コンポーネントがあり、ソートする必要があることを確認してください。

于 2009-12-31T00:53:37.153 に答える
1

TUAW のこの投稿では、Mac OS X の PhotoBooth での同様の問題について説明しています。

http://www.tuaw.com/2009/12/29/beware-photo-booth-time-stamps-its-a-bug-not-a-feature/

1 人のコメンターは、それが週末の問題であるという vikas に同意します。

于 2009-12-30T01:26:13.600 に答える