2010-01-27 13 views
14

Ich versuche, eine Datumszeichenkette zu nehmen und sie in ein spezifisches NSDate umzuwandeln (zB 1. Juli 1981), aber ich sehe nicht und Methoden, um das Datum einzustellen. Weiß jemand, wie man das erreicht? Vielleicht ein DateTime-Objekt in NSDate konvertieren?Create NSDate Monotouch

Antwort

-2

Sie wollen an der NSDateFormatter Klasse suchen :)

Ihr Code wie folgt aussehen wird. . .

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

NSDate *parsed = [formatter dateFromString:dateString]; 

S

PS Beispiel frei aus this question :)

+0

ich in Einstellung aussehen das Datum mit dem NSDateFormatter. Monotouch hat nicht alle Methoden von Ziel C, aber es sieht wie ein Schritt in die richtige Richtung aus. Danke Dean – Bryan

+0

Ich habe nie selbst monotouch verwendet, aber anscheinend ist NSDateFormatter in Version 1.4.4 (http://monotouch.net/index.php?title=Releases/MonoTouch_1.4.4&highlight=NSDateFormatter) verfügbar. – deanWombourne

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); 
} 

kopiert Diese

Alex helfen sollte

+4

Dies berücksichtigt nicht die Zeitzonenunterschiede zwischen NSDate und statetime. – BRogers

+1

http://developer.xamarin.com/guides/cross-platform/macios/unified/#Converting_DateTime_to_NSDate – testing

24

Der einfachste Weg ist es von Datetime zu setzen.

REVISION: Die NSDate Konvertierungsoperatoren sind jetzt explizit, nicht mehr implizit! Ich habe das folgende Beispiel aktualisiert.

Wenn Sie den NSDate Prototyp sehen werden Sie zwei Operatoren finden:

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

Diese beiden werden für Sie die Konvertierung tun.

Die explizite Konvertierung von NSDate in und aus DateTime ist ziemlich gut, aber Sie müssen beachten, dass NSDate immer eine UTC-Zeit ist und DateTime standardmäßig auf DateTimeKind.Unspecified (wenn aus der Datenbank gelesen) oder DateTimeKind.Locale (wenn festgelegt mit DateTime.Today). Der beste Weg, ohne komplizierte Zeitzonenberechnungen zu konvertieren ist, das richtige Datetimekind zu zwingen:

// 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); 
+4

Ich würde empfehlen, eine der folgenden Zeilen hinzuzufügen, um sicherzustellen, dass die korrekte Konvertierung von 'date = date.ToLocalTime();' perfekt funktioniert für mich zusätzlich zu dem, was Sie erwähnt haben. Danke für die Anleitung. – BRogers

+0

'date = DateTime.SpecifyKind (nsDate, DateTimeKind.Unspecified);' Dies für mich gibt das falsche Datum –

+0

Das funktionierte auch gut für mich. Vielen Dank! –

0
public NSDate ConvertDateTimeToNSDate(DateTime date) 
{ 
    DateTime newDate = TimeZone.CurrentTimeZone.ToLocalTime(
     new DateTime(2001, 1, 1, 0, 0, 0)); 
    return NSDate.FromTimeIntervalSinceReferenceDate(
     (date - newDate).TotalSeconds); 
} 

public DateTime ConvertNsDateToDateTime(NSDate date) 
{ 
    DateTime newDate = TimeZone.CurrentTimeZone.ToLocalTime( 
     new DateTime(2001, 1, 1, 0, 0, 0)); 
    return newDate.AddSeconds(date.SecondsSinceReferenceDate); 
} 

Quelle: https://theweeklybyte.wordpress.com/2014/05/27/convert-datetime-to-nsdate-and-back/

1

Try this:

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); 
    }