2010-01-27 40 views
14

我想取一個日期字符串,並將它變成一個特定的NSDate(例如1981年7月1日),但我沒有看到和設置日期的方法。有誰知道如何做到這一點?也許將一個DateTime對象轉換爲NSDate?創建NSDate Monotouch

回答

-2

你想看看NSDateFormatter類:)

您的代碼將是這個樣子。 。 。

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

NSDate *parsed = [formatter dateFromString:dateString]; 

小號

PS例從優從this question :)

+0

我會考慮設置使用NSDateFormatter的日期。 Monotouch不具備目標C的所有方法,但它看起來像是朝着正確方向邁出的一步。謝謝院長 – Bryan 2010-01-27 17:32:36

+0

我從來沒有使用monotouch自己,但顯然NSDateFormatter在版本1.4.4中可用(http://monotouch.net/index.php?title=Releases/MonoTouch_1.4.4&highlight=NSDateFormatter)。 – deanWombourne 2010-01-27 17:47:16

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 2013-03-15 19:39:39

+1

http://developer.xamarin.com/guides/cross-platform/macios/unified/#Converting_DateTime_to_NSDate – testing 2015-08-14 09:00:48

24

最簡單的方法是從日期時間設置。

修訂: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); 
+4

我會建議添加以下行以確保正確轉換'date = date.ToLocalTime();'完美地工作除了你所提到的之外,還有我。感謝您的指導。 – BRogers 2013-03-15 20:27:43

+0

'date = DateTime.SpecifyKind(nsDate,DateTimeKind.Unspecified);'這給我提供了不正確的日期 – 2014-11-03 07:04:38

+0

這對我也很好。謝謝! – 2015-01-25 16:37:41

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