Создать NSDate Monotouch

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

Ответы

Ответ 1

Самый простой способ - установить его из 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);

Ответ 2

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

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

Алекс

Ответ 3

Попробуйте следующее:

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

Ответ 4

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/

Ответ 5

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

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

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

NSDate *parsed = [formatter dateFromString:dateString];

S

PS Пример, свободно скопированный из этого вопроса:)