2010-01-27 26 views
14

Tôi đang cố gắng lấy một chuỗi ngày tháng và biến nó thành một NSD cụ thể (ví dụ: ngày 1 tháng 7 năm 1981), nhưng tôi không thấy và phương pháp để đặt ngày. Có ai biết làm thế nào để thực hiện điều này? Có lẽ chuyển đổi một đối tượng DateTime thành NSDate?Tạo NSDate Monotouch

Trả lời

-2

Bạn muốn nhìn vào lớp NSDateFormatter :)

Mã của bạn sẽ giống như thế này. . .

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

NSDate *parsed = [formatter dateFromString:dateString]; 

S

PS Ví dụ tự do sao chép từ this question :)

+0

tôi sẽ nhìn vào khung cảnh ngày sử dụng NSDateFormatter. Monotouch không có tất cả các phương pháp của mục tiêu C, nhưng nó trông giống như một bước đi đúng hướng. Cảm ơn Dean – Bryan

+0

Tôi chưa bao giờ sử dụng monotouch bản thân mình nhưng rõ ràng NSDateFormatter có sẵn trong phiên bản 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); 
} 

Điều này sẽ giúp

Alex

+4

Điều này không tính đến sự khác biệt về múi giờ của tài khoản giữa cách NSDate xử lý công cụ và cách datetime thực hiện. – BRogers

+1

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

24

Cách đơn giản nhất là để thiết lập nó từ DateTime.

REVISION: Các toán tử chuyển đổi NSDate hiện rõ ràng, không ngầm nữa! Tôi đã cập nhật ví dụ bên dưới.

Nếu bạn nhìn vào nguyên mẫu NSDate bạn sẽ tìm thấy hai nhà khai thác:

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

Hai sẽ thực hiện chuyển đổi cho bạn.

Chuyển đổi rõ ràng NSDate đến và từ DateTime khá tốt, nhưng bạn phải biết rằng NSDate luôn là thời gian UTC và DateTime được đặt mặc định thành DateTimeKind.Unspecified (khi đọc từ cơ sở dữ liệu) hoặc DateTimeKind.Locale (khi được đặt với DateTime.Today). Cách tốt nhất để chuyển đổi mà không cần tính toán múi giờ phức tạp là để buộc các DateTimeKind phải:

// 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

Tôi khuyên bạn nên thêm một dòng sau để đảm bảo chuyển đổi đúng 'date = date.ToLocalTime();' đã hoạt động hoàn hảo cho tôi ngoài những gì bạn đã đề cập. Cảm ơn bạn đã hướng dẫn. – BRogers

+0

'ngày = DateTime.SpecifyKind (nsDate, DateTimeKind.Unspecified);' Điều này cho tôi cho ngày không chính xác –

+0

Điều này làm việc tuyệt vời cho tôi quá. Cảm ơn! –

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

Nguồn: https://theweeklybyte.wordpress.com/2014/05/27/convert-datetime-to-nsdate-and-back/

1

Hãy thử điều này:

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