2010-01-27 2 views
14

Я пытаюсь взять строку даты и превратить ее в определенный NSDate (например, 1 июля 1981 года), но я не вижу и методы для установки даты. Кто-нибудь знает, как это сделать? Возможно, преобразовать объект DateTime в NSDate?Создать NSDate Monotouch

ответ

-2

Вы хотите посмотреть на NSDateFormatter класс :)

Ваш код будет выглядеть примерно так. , ,

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

NSDate *parsed = [formatter dateFromString:dateString]; 

S

PS Пример свободно скопированы из this question :)

+0

Я буду смотреть в настройки дату с использованием NSDateFormatter. У Monotouch нет всех методов объектива C, но он выглядит как шаг в правильном направлении. Спасибо Dean – Bryan

+0

Я никогда не использовал monotouch самостоятельно, но, очевидно, NSDateFormatter доступен в версии 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); 
} 

Это должно помочь

Алекс

+4

Это не учитывает различия в часовом поясе между тем, как NSDate обрабатывает данные и как работает дата и время. – BRogers

+1

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

24

Самый простой способ, чтобы установить его из DateTime.

ПЕРЕСМОТР: Операторы преобразования NSDate теперь явны, а не подразумеваются больше! Я обновил приведенный ниже пример.

Если посмотреть на прототип NSDate вы найдете два оператора:

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

Эти два будут делать преобразования для вас.

Явное преобразование NSDate в DateTime и из DateTime неплохое, но вы должны знать, что NSDate всегда является временем UTC, а для DateTime по умолчанию установлено значение DateTimeKind.Unspecified (при чтении из базы данных) или DateTimeKind.Locale (если установлено с DateTime.Today). Лучший способ для преобразования без сложных вычислений часовых поясов, чтобы заставить правильный 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

Я бы порекомендовал добавить следующую строку, чтобы убедиться, что ваша конвертация правильно 'date = date.ToLocalTime();' отлично работает для меня в дополнение к тому, что вы упомянули. Спасибо за руководство. – BRogers

+0

'date = DateTime.SpecifyKind (nsDate, DateTimeKind.Unspecified);' Это для меня дает неправильную дату –

+0

Это отлично подойди для меня. Благодаря! –

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

Источник: https://theweeklybyte.wordpress.com/2014/05/27/convert-datetime-to-nsdate-and-back/

1

Попробуйте это:

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); 
    } 
Смежные вопросы