Создать NSDate Monotouch - PullRequest
       5

Создать NSDate Monotouch

14 голосов
/ 27 января 2010

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

Ответы [ 5 ]

24 голосов
/ 20 марта 2011

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

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

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

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

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

Явное преобразование NSDate в 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);
9 голосов
/ 03 февраля 2011
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);
}

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

Alex

1 голос
/ 03 июля 2016

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

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);
    }
0 голосов
/ 05 февраля 2015
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/

0 голосов
/ 27 января 2010

Вы хотите взглянуть на NSDateFormatter class:)

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

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

NSDate *parsed = [formatter dateFromString:dateString];

S

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

...