2017-10-24 4 views
-2

特定の時間領域(フランス時間帯)と特定の月の日付(10月30,31)のNsDateをNSDateコンポーネントに変換する際に問題が発生しました。私はこの問題が日の節約のために起こると思う。この問題をどのように克服できるのかをお勧めします。 以下の私のコードスニペット、私は10月30,31以外間違っdateComponents値を取得していNSDateをNSDateコンポーネントに変換するとNSDateComponentsの値が正しくありません

public static NSDate GetDate(int year, int month, int date, int hour, int mins, int secs) 
     { 
      NSCalendar calendar = NSCalendar.CurrentCalendar; 
      NSDate today = new NSDate(); 
      // Get the year, month, day from the date 
      NSDateComponents startDateComponents = calendar.Components(
      NSCalendarUnit.Year | NSCalendarUnit.Month | NSCalendarUnit.Day, today); 
      // Set the hour, minute, second 
      startDateComponents.Year = year; 
      startDateComponents.Month = month; 
      startDateComponents.Day = date; 
      startDateComponents.Hour = hour; 
      startDateComponents.Minute = mins; 
      startDateComponents.Second = secs; 
      return calendar.DateFromComponents(startDateComponents); 
     } 

NSDate date = GetDate(2017, 10, 30, 6, 0, 0); 
NSDateComponents dateComp= NSCalendar.CurrentCalendar.Components(NSCalendarUnit.Year | NSCalendarUnit.Month | NSCalendarUnit.Day | NSCalendarUnit.Hour ,date); 

見つけてください。私は日付を変換するために何かを逃したことをお勧めします。

+0

「私は間違ったdateComponentsを取得しました。 – Larme

+0

私は前の日付の値を取得しています。たとえば、oct 30を設定した場合、oct 29を取得しています。 – Siva

答えて

0

ただし、異なる時間帯を設定してもまだ動作しません.GMT時間間隔を手動で追加する必要があります。

以下のコードを試してください。

public static NSDate GetDate(int year, int month, int date, int hour, int mins, int secs) 
{ 
    NSCalendar calendar = NSCalendar.CurrentCalendar; 
    NSDate today = new NSDate(); 
    // Get the year, month, day from the date 
    NSDateComponents startDateComponents = calendar.Components(
    NSCalendarUnit.Year | NSCalendarUnit.Month | NSCalendarUnit.Day, today); 
    // Set the hour, minute, second 
    startDateComponents.Year = year; 
    startDateComponents.Month = month; 
    startDateComponents.Day = date; 
    startDateComponents.Hour = hour; 
    startDateComponents.Minute = mins; 
    startDateComponents.Second = secs; 

    NSDate d = calendar.DateFromComponents(startDateComponents); 
    //interval between GMT and local timezone. 
    nint interval = NSTimeZone.SystemTimeZone.SecondsFromGMT(d); 
    //add the interval 
    NSDate finalDate = d.AddSeconds(interval); 
    return finalDate; 
} 
+0

Cola Xia、答えをありがとう、それは私のために働いている – Siva

0

私は、時間帯を忘れたかもしれないと思います。このコードを追加します。息子タンが言ったように、TIMEZONEは、この問題の原因となった

calendar.timeZone = YourTimeZone 
+0

答えがありがとう、このタイムゾーンを設定した後でも解決策を試しました。これらの特定の日付の間違った日付を取得するのは有線です。私はこの10月の月以外の正しい日付の値を得ることができます。 – Siva

+0

DateFromComponentsメソッドを使用すると、多くのオプションがあります。私はそれがあなたにとって有益だと思います。 https://developer.apple.com/documentation/foundation/nscalendaroptions?language=objc –

関連する問題