ดูเหมือนจะเป็นเรื่องง่ายๆ แต่ดูเหมือนจะหาวิธีทำไม่ได้
จะเป็นการดีที่จะได้เห็นวิธีการต่างๆ
ดูเหมือนจะเป็นเรื่องง่ายๆ แต่ดูเหมือนจะหาวิธีทำไม่ได้
จะเป็นการดีที่จะได้เห็นวิธีการต่างๆ
คำตอบ:
คำตอบของ @ Chuck ถูกต้องและนำฉันไปสู่รหัสต่อไปนี้ คิดว่าฉันจะแบ่งปัน:
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:10];
[comps setMonth:10];
[comps setYear:2010];
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:comps];
คุณสามารถใช้สิ่งนี้
NSString *dateString = @"03-Sep-11";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"dd-MMM-yy";
NSDate *date = [dateFormatter dateFromString:dateString];
หวังว่านี่จะช่วยคุณได้
หากคุณกำลังพูดถึงปฏิทินวันที่เฉพาะเจาะจงมากกว่าวัน UNIXy คุณอาจต้องการ dateFromComponents:
NSCalendar
ตัวอย่างมักเป็นวิธีที่ง่ายที่สุดในการเรียนรู้ นี่คือตัวอย่างบางส่วน
อันนี้ง่ายที่สุด
let currentDateTime = Date()
// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 2017
dateComponents.month = 2
dateComponents.day = 20
// Create date from components
let userCalendar = Calendar.current // user calendar
let dateThisPostWasUpdated = userCalendar.date(from: dateComponents)
// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 1976
dateComponents.month = 4
dateComponents.day = 1
// Create date from components
let userCalendar = Calendar.current // user calendar
let appleFoundedDate = userCalendar.date(from: dateComponents)
มีวิธีอื่นในการสร้างวันที่ด้วยเช่นกัน หากคุณต้องการที่จะเรียนรู้เหล่านั้นเช่นเดียวกับวิธีการแสดงวันที่แล้วดูคำฟูลเลอร์ของฉัน
โปรดดูเอกสารสำหรับNSDate คุณสามารถใช้dateFromString:
วิธีการNSDateFormatter
หรือวิธีการdateFromComponents:
NSCalendar
init
?
ฉันพบหัวข้อนี้ในขณะที่กำลังมองหาคำตอบสำหรับคำถามนี้ แต่แล้วฉันก็พบตัวอย่างที่ดีในหนังสือการเขียนโปรแกรม Big Nerd Ranch Objective-C เล่มหนึ่งของฉัน ให้เครดิตกับพวกเขาไม่ใช่ฉัน
NSDateComponents *myBDay =[[NSDateComponents alloc] init];
[myBDay setDay:22];
[myBDay setMonth: 04];
[myBDay setYear: 1984];
[myBDay setHour:9];
[myBDay setMinute:25];
[myBDay setSecond:35];
NSCalendar *g = [[ NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDate *dateOfBirth = [g dateFromComponents:myBDay];
มันไร้สาระใช่มั้ย?
กลางปี 2013 และ Apple ยังคงไม่ได้ให้วิธีง่ายๆในการตั้งค่า NSDate
ระหว่างโปรเจ็กต์ iPad ปัจจุบันของฉันฉันไม่อยากเชื่อเลยว่าฉันต้องหยุดการทำงานไปชั่วขณะเพื่อเขียนคลาสตัวช่วยของตัวเองเพื่อรับค่าปีจาก NSDate ฉันหมายความว่ามานี่เป็นเรื่องพื้นฐาน
อย่างไรก็ตามนี่คือคลาสผู้ช่วยที่ฉันใช้ในโปรเจ็กต์ของฉันเพื่อแปลงสตริงเป็นค่า NSDate:
@implementation DateHelper
+(NSDate*)parseDateString:(NSString *)dateString
{
NSDateFormatter *rfc3339TimestampFormatterWithTimeZone = [[NSDateFormatter alloc] init];
[rfc3339TimestampFormatterWithTimeZone setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
[rfc3339TimestampFormatterWithTimeZone setDateFormat:@"MMM dd, yyyy"];
NSDate *theDate = nil;
NSError *error = nil;
if (![rfc3339TimestampFormatterWithTimeZone getObjectValue:&theDate forString:dateString range:nil error:&error]) {
NSLog(@"Date '%@' could not be parsed: %@", dateString, error);
}
return theDate;
}
@end
เมื่อใช้รหัสนี้คุณสามารถตั้งค่า NSDate โดยใช้สิ่งต่างๆเช่น:
NSDate* date = [DateHelper parseDateString:@"Jul 16, 2013"];
หมายเหตุ: ฟังก์ชั่นนี้เป็นไปตามรหัสที่นำมาจากที่นี่: https://stackoverflow.com/a/3968411/391605
วิธีการแก้ปัญหาของฉันได้รับการใช้รหัสต่อไป แต่ผมพบว่าบางครั้งมันก็จะไม่แยกและจะกลับมาเป็นศูนย์
// Take a date string in the format "Oct 23, 2013", and convert it into a NSDate value
// THIS DOESN'T WORK ! DON'T TRUST THIS CODE !!
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMM dd, yyyy"];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDate* date = [formatter dateFromString:dateString];
ฉันจำได้ว่ามันล้มเหลวอย่างน่าอนาถเมื่อ "12 ต.ค. 2555" ... ซึ่งเป็นสาเหตุที่ฉันยอมแพ้และใช้ฟังก์ชัน "parseDateString" ที่ซับซ้อนกว่าที่แสดงไว้ด้านบน
ประเด็นของฉันคือ ... ระวัง
ฟังก์ชัน NSDate พื้นฐานบางอย่างทำงานไม่ถูกต้อง ...
setHour
,setMinute
,setSecond
ฯลฯ สำหรับเมล็ดปลีกย่อย