开发者

Create NSDate Monotouch

I am trying to take a date string and turn it into a specific NSDate 开发者_如何学C(eg. July 1, 1981), but I don't see and methods for setting the date. Does anyone know how to accomplish this? Perhaps convert a DateTime object to NSDate?


The easiest way is to set it from DateTime.

REVISION: The NSDate conversion operators are now explicit, not implicit anymore! I updated the example below.

If you look at the NSDate prototype you will find two operators:

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

These two will do the conversion for you.

Explicit conversion of NSDate to and from DateTime is quite good, but you must be aware that NSDate is always an UTC time and DateTime is default set to DateTimeKind.Unspecified (when read from database) or DateTimeKind.Locale (when set with DateTime.Today). The best way to convert without complicated time-zone computations is to force the right 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);


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

This should help

Alex


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


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/


You want to look at the NSDateFormatter class :)

Your code will look something like this . . .

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

NSDate *parsed = [formatter dateFromString:dateString];

S

PS Example liberally copied from this question :)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜