2010-01-27 6 views
14

J'essaie de prendre une chaîne de date et de la transformer en NSDate spécifique (par exemple, 1er Juillet 1981), mais je ne vois pas et les méthodes pour définir la date. Est ce que quelqu'un sait comment accomplir cela? Peut-être convertir un objet DateTime en NSDate?Créer NSDate Monotouch

Répondre

-2

Vous voulez regarder la classe NSDateFormatter :)

Votre code ressemblera à quelque chose comme ça. . .

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

NSDate *parsed = [formatter dateFromString:dateString]; 

S

PS Exemple généreusement copié à partir this question :)

+0

je regarderai dans la mise la date en utilisant le NSDateFormatter. Monotouch ne possède pas toutes les méthodes de l'objectif C, mais cela ressemble à un pas dans la bonne direction. Merci Dean – Bryan

+0

Je n'ai jamais utilisé monotouch moi-même mais apparemment NSDateFormatter est disponible dans la version 1.4.4 (http://monotouch.net/index.php?title=Releases/MonoTouch_1.4.4&highlight=NSDateFormatter). – 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); 
} 

Cela devrait aider

Alex

+4

Cela ne prend pas en compte les différences de fuseau horaire entre la façon dont NSDate gère les choses et comment datetime fonctionne. – BRogers

+1

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

24

Le plus simple est de le mettre de DateTime. REVISION: Les opérateurs de conversion NSDate sont maintenant explicites, pas implicites! J'ai mis à jour l'exemple ci-dessous.

Si vous regardez le prototype NSDate vous trouverez deux opérateurs:

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

Ces deux fera la conversion pour vous.

La conversion explicite de NSDate vers et depuis DateTime est assez bonne, mais vous devez être conscient que NSDate est toujours une heure UTC et DateTime est défini par défaut sur DateTimeKind.Unspecified (lors de la lecture de base de données) ou DateTimeKind.Locale (lorsque défini avec DateTime.Today). La meilleure façon de convertir sans calculs de fuseau horaire compliqué est de forcer le droit DateTimeKind:

// 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

Je vous recommande d'ajouter la ligne suivante pour vous assurer que vous convertissez correctement 'date = date.ToLocalTime();' a parfaitement fonctionné pour moi en plus de ce que vous avez mentionné. Merci pour les conseils. – BRogers

+0

'date = DateTime.SpecifyKind (nsDate, DateTimeKind.Unspecified);' Ceci pour moi donne la date incorrecte –

+0

Cela a fonctionné très bien pour moi aussi. Merci! –

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

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

1

Essayez ceci:

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