🎯 Exemples recommandés
Balanced sample collections from various categories for you to explore
Date et Heure macOS Objective-C - Exemples
Exemples date et heure macOS Objective-C incluant NSDate, NSDateFormatter, NSCalendar intervalles temps
💻 Bases NSDate objectivec
🟢 simple
⭐⭐⭐
Créer, manipuler comparer dates utilisant NSDate
⏱️ 25 min
🏷️ objectivec, macos, datetime, nsdate
Prerequisites:
Objective-C basics, Foundation framework
// macOS Objective-C NSDate Basics
// Using Foundation framework
#import <Foundation/Foundation.h>
// MARK: - 1. Creating Dates
@interface DateCreation : NSObject
+ (void)demonstrateCreation {
NSLog(@"--- Date Creation ---");
// Current date
NSDate *now = [NSDate date];
NSLog(@"Current date: %@", now);
// Distant past
NSDate *past = [NSDate distantPast];
NSLog(@"Distant past: %@", past);
// Distant future
NSDate *future = [NSDate distantFuture];
NSLog(@"Distant future: %@", future);
// Tomorrow
NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:86400];
NSLog(@"Tomorrow: %@", tomorrow);
// Yesterday
NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-86400];
NSLog(@"Yesterday: %@", yesterday);
// Specific date
NSDateComponents *components = [[NSDateComponents alloc] init];
components.year = 2024;
components.month = 12;
components.day = 25;
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *christmas = [calendar dateFromComponents:components];
NSLog(@"Christmas 2024: %@", christmas);
// From string
NSString *dateString = @"2024-12-25 14:30:00";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSDate *parsed = [formatter dateFromString:dateString];
NSLog(@"Parsed date: %@", parsed);
// Unix timestamp
NSDate *fromTimestamp = [NSDate dateWithTimeIntervalSince1970:1703500000];
NSLog(@"From timestamp: %@", fromTimestamp);
}
@end
// MARK: - 2. Date Comparison
@interface DateComparison : NSObject
+ (void)demonstrateComparison {
NSLog(@"\n--- Date Comparison ---");
NSDate *now = [NSDate date];
NSDate *past = [NSDate dateWithTimeIntervalSinceNow:-3600];
NSDate *future = [NSDate dateWithTimeIntervalSinceNow:3600];
// Compare
NSComparisonResult result = [now compare:past];
if (result == NSOrderedAscending) {
NSLog(@"Now < Past");
} else if (result == NSOrderedDescending) {
NSLog(@"Now > Past");
} else {
NSLog(@"Now == Past");
}
// Earlier/Later
BOOL isEarlier = [past isEarlierThan:now];
BOOL isLater = [future isLaterThan:now];
NSLog(@"Past is earlier than now: %@", isEarlier ? @"YES" : @"NO");
NSLog(@"Future is later than now: %@", isLater ? @"YES" : @"NO");
// Between dates
NSDate *start = [NSDate dateWithTimeIntervalSinceNow:-7200];
NSDate *end = [NSDate dateWithTimeIntervalSinceNow:7200];
BOOL isBetween = ([now compare:start] == NSOrderedDescending) &&
([now compare:end] == NSOrderedAscending);
NSLog(@"Now is between start and end: %@", isBetween ? @"YES" : @"NO");
// Equal dates (within tolerance)
NSDate *date1 = [NSDate date];
[NSThread sleepForTimeInterval:0.1];
NSDate *date2 = [NSDate date];
NSTimeInterval tolerance = 1.0; // 1 second
BOOL isEqual = fabs([date1 timeIntervalSinceDate:date2]) < tolerance;
NSLog(@"Dates equal (within %.0fs): %@", tolerance, isEqual ? @"YES" : @"NO");
}
@end
// MARK: - 3. Date Intervals
@interface DateIntervals : NSObject
+ (void)demonstrateIntervals {
NSLog(@"\n--- Date Intervals ---");
NSDate *start = [NSDate date];
// Time interval since date
NSTimeInterval interval = [start timeIntervalSinceNow];
NSLog(@"Interval since now: %.0f seconds", interval);
// Add time interval
NSDate *plusOneHour = [start dateByAddingTimeInterval:3600];
NSLog(@"Plus one hour: %@", plusOneHour);
// Days from now
NSDate *sevenDaysLater = [NSDate dateWithTimeIntervalSinceNow:7 * 86400];
NSLog(@"Seven days later: %@", sevenDaysLater);
// Days ago
NSDate *thirtyDaysAgo = [NSDate dateWithTimeIntervalSinceNow:-30 * 86400];
NSLog(@"Thirty days ago: %@", thirtyDaysAgo);
// Time between dates
NSDate *date1 = [NSDate dateWithTimeIntervalSince1970:0];
NSDate *date2 = [NSDate date];
NSTimeInterval secondsBetween = [date2 timeIntervalSinceDate:date1];
NSLog(@"Seconds between dates: %.0f", secondsBetween);
NSInteger daysBetween = floor(secondsBetween / 86400);
NSLog(@"Days between: %ld days", (long)daysBetween);
// Calculate age
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd";
NSDate *birthDate = [formatter dateFromString:@"1990-06-15"];
NSTimeInterval ageInSeconds = [[NSDate date] timeIntervalSinceDate:birthDate];
NSInteger ageInYears = floor(ageInSeconds / (365.25 * 24 * 3600));
NSLog(@"Age: %ld years", (long)ageInYears);
}
@end
// MARK: - 4. NSDateFormatter
@interface DateFormatting : NSObject
+ (void)demonstrateFormatting {
NSLog(@"\n--- Date Formatting ---");
NSDate *now = [NSDate date];
// Predefined styles
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateStyle = NSDateFormatterShortStyle;
formatter.timeStyle = NSDateFormatterNoStyle;
NSLog(@"Short date: %@", [formatter stringFromDate:now]);
formatter.dateStyle = NSDateFormatterMediumStyle;
formatter.timeStyle = NSDateFormatterShortStyle;
NSLog(@"Medium date, short time: %@", [formatter stringFromDate:now]);
formatter.dateStyle = NSDateFormatterLongStyle;
formatter.timeStyle = NSDateFormatterLongStyle;
NSLog(@"Long date, long time: %@", [formatter stringFromDate:now]);
formatter.dateStyle = NSDateFormatterFullStyle;
formatter.timeStyle = NSDateFormatterFullStyle;
NSLog(@"Full style: %@", [formatter stringFromDate:now]);
// Custom formats
formatter.dateFormat = @"yyyy-MM-dd";
NSLog(@"ISO date: %@", [formatter stringFromDate:now]);
formatter.dateFormat = @"MMMM dd, yyyy";
NSLog(@"Readable: %@", [formatter stringFromDate:now]);
formatter.dateFormat = @"HH:mm:ss";
NSLog(@"Time: %@", [formatter stringFromDate:now]);
formatter.dateFormat = @"EEEE, MMMM d, yyyy 'at' h:mm a";
NSLog(@"Friendly: %@", [formatter stringFromDate:now]);
// Relative date formatting
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateFormatter *relativeFormatter = [[NSDateFormatter alloc] init];
relativeFormatter.dateStyle = NSDateFormatterShortStyle;
relativeFormatter.timeStyle = NSDateFormatterShortStyle;
relativeFormatter.doesRelativeDateFormatting = YES;
NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-86400];
NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:86400];
NSLog(@"Yesterday: %@", [relativeFormatter stringFromDate:yesterday]);
NSLog(@"Tomorrow: %@", [relativeFormatter stringFromDate:tomorrow]);
// Locale
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"fr_FR"];
formatter.dateFormat = @"MMMM dd, yyyy";
NSLog(@"French locale: %@", [formatter stringFromDate:now]);
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"de_DE"];
NSLog(@"German locale: %@", [formatter stringFromDate:now]);
// Parse from string
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString *dateString = @"2024-12-25 15:30:00";
NSDate *parsed = [formatter dateFromString:dateString];
NSLog(@"Parsed: %@", parsed);
}
@end
// MARK: - 5. NSCalendar and Components
@interface CalendarOperations : NSObject
+ (void)demonstrateCalendar {
NSLog(@"\n--- NSCalendar Operations ---");
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
// Extract components
NSDateComponents *components = [calendar componentsInTimeZone:[NSTimeZone systemTimeZone]
fromDate:now];
NSLog(@"Year: %ld", (long)components.year);
NSLog(@"Month: %ld", (long)components.month);
NSLog(@"Day: %ld", (long)components.day);
NSLog(@"Hour: %ld", (long)components.hour);
NSLog(@"Minute: %ld", (long)components.minute);
NSLog(@"Second: %ld", (long)components.second);
// Weekday
NSLog(@"Weekday: %ld", (long)components.weekday);
// Week of year
NSLog(@"Week of year: %ld", (long)components.weekOfYear);
// Specific components
NSInteger year = [calendar component:NSCalendarUnitYear fromDate:now];
NSInteger month = [calendar component:NSCalendarUnitMonth fromDate:now];
NSInteger day = [calendar component:NSCalendarUnitDay fromDate:now];
NSLog(@"Date: %ld-%02ld-%02ld", (long)year, (long)month, (long)day);
// First day of month
NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:now];
NSLog(@"Days in month: %lu", (unsigned long)range.length);
// Start of day
NSDate *startOfDay = [calendar startOfDayForDate:now];
NSLog(@"Start of day: %@", startOfDay);
// End of day
NSDate *endOfDay = [calendar dateBySettingHour:23 minute:59 second:59 ofDate:now options:0];
NSLog(@"End of day: %@", endOfDay);
// Week bounds
NSDate *startOfWeek = [calendar dateFromComponents:[calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitWeekday | NSCalendarUnitDay forDate:now]];
components.weekday = calendar.firstWeekday;
components.day = components.day - (components.weekday - calendar.firstWeekday);
NSDate *weekStart = [calendar dateFromComponents:components];
NSLog(@"Start of week: %@", weekStart);
}
@end
// MARK: - 6. Date Arithmetic
@interface DateArithmetic : NSObject
+ (void)demonstrateArithmetic {
NSLog(@"\n--- Date Arithmetic ---");
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
// Add components
NSDateComponents *addComponents = [[NSDateComponents alloc] init];
addComponents.day = 7;
addComponents.month = 1;
NSDate *futureDate = [calendar dateByAddingComponents:addComponents toDate:now options:0];
NSLog(@"Plus 1 month and 7 days: %@", futureDate);
// Subtract components
NSDateComponents *subtractComponents = [[NSDateComponents alloc] init];
subtractComponents.month = -3;
NSDate *pastDate = [calendar dateByAddingComponents:subtractComponents toDate:now options:0];
NSLog(@"Minus 3 months: %@", pastDate);
// Add years
NSDateComponents *yearComponents = [[NSDateComponents alloc] init];
yearComponents.year = 1;
NSDate *nextYear = [calendar dateByAddingComponents:yearComponents toDate:now options:0];
NSLog(@"Next year: %@", nextYear);
// Last day of month
NSDate *endOfMonth = [calendar dateByAddingUnit:NSCalendarUnitMonth value:1 toDate:now options:0];
NSDateComponents *endOfMonthComponents = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth fromDate:endOfMonth];
endOfMonthComponents.day = 0;
endOfMonth = [calendar dateFromComponents:endOfMonthComponents];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd";
NSLog(@"End of month: %@", [formatter stringFromDate:endOfMonth]);
// Business days (simplified)
NSDate *fiveBusinessDays = [self addBusinessDays:5 toDate:now calendar:calendar];
NSLog(@"5 business days later: %@", [formatter stringFromDate:fiveBusinessDays]);
}
+ (NSDate *)addBusinessDays:(NSInteger)days toDate:(NSDate *)date calendar:(NSCalendar *)calendar {
NSDate *result = date;
NSInteger added = 0;
while (added < days) {
result = [calendar dateByAddingUnit:NSCalendarUnitDay value:1 toDate:result options:0];
NSDateComponents *comps = [calendar components:NSCalendarUnitWeekday fromDate:result];
// Skip weekends (Saturday = 7, Sunday = 1)
if (comps.weekday != 1 && comps.weekday != 7) {
added++;
}
}
return result;
}
@end
// MARK: - 7. Time Zones
@interface TimeZoneOperations : NSObject
+ (void)demonstrateTimeZones {
NSLog(@"\n--- Time Zone Operations ---");
NSDate *now = [NSDate date];
// System timezone
NSTimeZone *systemTZ = [NSTimeZone systemTimeZone];
NSLog(@"System timezone: %@", systemTZ.name);
NSLog(@"Abbreviation: %@", systemTZ.abbreviation);
// UTC timezone
NSTimeZone *utcTZ = [NSTimeZone timeZoneWithName:@"UTC"];
NSLog(@"UTC offset: %@", [systemTZ secondsFromGMTForDate:now] > 0 ? @"+" : @"");
NSLog(@"Seconds from GMT: %ld", (long)[systemTZ secondsFromGMTForDate:now]);
// Convert timezones
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss z";
formatter.timeZone = utcTZ;
NSLog(@"UTC: %@", [formatter stringFromDate:now]);
formatter.timeZone = [NSTimeZone timeZoneWithName:@"America/New_York"];
NSLog(@"New York: %@", [formatter stringFromDate:now]);
formatter.timeZone = [NSTimeZone timeZoneWithName:@"Europe/London"];
NSLog(@"London: %@", [formatter stringFromDate:now]);
formatter.timeZone = [NSTimeZone timeZoneWithName:@"Asia/Tokyo"];
NSLog(@"Tokyo: %@", [formatter stringFromDate:now]);
// Available timezones
NSArray *timezoneNames = [NSTimeZone knownTimeZoneNames];
NSLog(@"\nAvailable timezones (first 10):");
for (NSString *name in [timezoneNames subarrayWithRange:NSMakeRange(0, 10)]) {
NSTimeZone *tz = [NSTimeZone timeZoneWithName:name];
NSLog(@" %@ (GMT%@%ldh)",
name,
[tz secondsFromGMT] >= 0 ? @"+" : @"",
(long)([tz secondsFromGMT] / 3600));
}
}
@end
// MARK: - 8. Utility Functions
@interface DateUtilities : NSObject
+ (BOOL)isToday:(NSDate *)date {
NSCalendar *calendar = [NSCalendar currentCalendar];
return [calendar isDateInToday:date];
}
+ (BOOL)isYesterday:(NSDate *)date {
NSCalendar *calendar = [NSCalendar currentCalendar];
return [calendar isDateInYesterday:date];
}
+ (BOOL)isTomorrow:(NSDate *)date {
NSCalendar *calendar = [NSCalendar currentCalendar];
return [calendar isDateInTomorrow:date];
}
+ (BOOL)isThisWeek:(NSDate *)date {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
NSDate *startOfWeek;
NSTimeInterval interval;
[calendar rangeOfUnit:NSCalendarUnitWeekOfMonth
startDate:&startOfWeek
interval:&interval
forDate:now];
return [date compare:startOfWeek] != NSOrderedAscending &&
[date compare:[startOfWeek dateByAddingTimeInterval:interval]] != NSOrderedDescending;
}
+ (BOOL)isThisMonth:(NSDate *)date {
NSCalendar *calendar = [NSCalendar currentCalendar];
return [calendar isDateInThisMonth:date];
}
+ (BOOL)isThisYear:(NSDate *)date {
NSCalendar *calendar = [NSCalendar currentCalendar];
return [calendar isDateInThisYear:date];
}
+ (NSInteger)daysBetween:(NSDate *)from and:(NSDate *)to {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSCalendarUnitDay
fromDate:to
toDate:from
options:0];
return labs(components.day);
}
+ (void)demonstrateUtilities {
NSLog(@"\n--- Utility Functions ---");
NSDate *today = [NSDate date];
NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-86400];
NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:86400];
NSDate *lastWeek = [NSDate dateWithTimeIntervalSinceNow:-7 * 86400];
NSDate *lastMonth = [NSDate dateWithTimeIntervalSinceNow:-30 * 86400];
NSLog(@"Today is today: %@", [self isToday:today] ? @"YES" : @"NO");
NSLog(@"Yesterday is yesterday: %@", [self isYesterday:yesterday] ? @"YES" : @"NO");
NSLog(@"Tomorrow is tomorrow: %@", [self isTomorrow:tomorrow] ? @"YES" : @"NO");
NSLog(@"Last week is this week: %@", [self isThisWeek:lastWeek] ? @"YES" : @"NO");
NSLog(@"Last month is this month: %@", [self isThisMonth:lastMonth] ? @"YES" : @"NO");
NSInteger days = [self daysBetween:yesterday and:tomorrow];
NSLog(@"Days between yesterday and tomorrow: %ld", (long)days);
}
@end
// MARK: - Main Demonstration
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"=== macOS Objective-C NSDate Examples ===\n");
// 1. Creation
[DateCreation demonstrateCreation];
// 2. Comparison
[DateComparison demonstrateComparison];
// 3. Intervals
[DateIntervals demonstrateIntervals];
// 4. Formatting
[DateFormatting demonstrateFormatting];
// 5. Calendar
[CalendarOperations demonstrateCalendar];
// 6. Arithmetic
[DateArithmetic demonstrateArithmetic];
// 7. Timezones
[TimeZoneOperations demonstrateTimeZones];
// 8. Utilities
[DateUtilities demonstrateUtilities];
NSLog(@"\n=== NSDate Examples Completed ===");
}
return 0;
}