`
linwwwei
  • 浏览: 224035 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

iphone之日期与时间(转载)

阅读更多

@interface NSDate (Helper)
- (NSUInteger)daysAgo;
- (NSUInteger)daysAgoAgainstMidnight;
- (NSString *)stringDaysAgo;
- (NSString *)stringDaysAgoAgainstMidnight:(BOOL)flag;
- (NSUInteger)weekday;
+ (NSDate *)dateFromString:(NSString *)string;
+ (NSDate *)dateFromString:(NSString *)string withFormat:(NSString *)format;
+ (NSString *)stringFromDate:(NSDate *)date withFormat:(NSString *)string;
+ (NSString *)stringFromDate:(NSDate *)date;
+ (NSString *)stringForDisplayFromDate:(NSDate *)date;
+ (NSString *)stringForDisplayFromDate:(NSDate *)date prefixed:(BOOL)prefixed;
- (NSString *)string;
- (NSString *)stringWithFormat:(NSString *)format;
- (NSString *)stringWithDateStyle:(NSDateFormatterStyle)dateStyle timeStyle:(NSDateFormatterStyle)timeStyle;
- (NSDate *)beginningOfWeek;
- (NSDate *)beginningOfDay;
- (NSDate *)endOfWeek;
+ (NSString *)dateFormatString;
+ (NSString *)timeFormatString;
+ (NSString *)timestampFormatString;
+ (NSString *)dbFormatString;
@end
#import "NSDate+Helper.h"



@implementation NSDate (Helper)



- (NSUInteger)daysAgo {

NSCalendar *calendar = [NSCalendar currentCalendar];

NSDateComponents *components = [calendar components:(NSDayCalendarUnit)

fromDate:self

toDate:[NSDatedate]

options:0];

return [components day];

}



- (NSUInteger)daysAgoAgainstMidnight {

// get a midnight version of ourself:

NSDateFormatter *mdf = [[NSDateFormatter alloc]init];

[mdf setDateFormat:@"yyyy-MM-dd"];

NSDate *midnight = [mdf dateFromString:[mdf stringFromDate:self]];

[mdf release];

return (int)[midnight timeIntervalSinceNow] / (60*60*24) *-1;

}



- (NSString *)stringDaysAgo {

return[self stringDaysAgoAgainstMidnight:YES];

}



- (NSString *)stringDaysAgoAgainstMidnight:(BOOL)flag {

NSUInteger daysAgo = (flag) ? [selfdaysAgoAgainstMidnight] : [selfdaysAgo];

NSString *text = nil;

switch (daysAgo) {

case0:

text = @"Today";

break;

case1:

text = @"Yesterday";

break;

default:

text = [NSStringstringWithFormat:@"%d days ago", daysAgo];

}

return text;

}



- (NSUInteger)weekday {

NSCalendar *calendar = [NSCalendar currentCalendar];

NSDateComponents *weekdayComponents = [calendar components:(NSWeekdayCalendarUnit) fromDate:self];

return [weekdayComponents weekday];

}



+ (NSDate *)dateFromString:(NSString *)string {

return[NSDate dateFromString:string withFormat:[NSDate dbFormatString]];

}



+ (NSDate *)dateFromString:(NSString *)string withFormat:(NSString *)format {

NSDateFormatter *inputFormatter = [[NSDateFormatter alloc]init];

[inputFormatter setDateFormat:format];

NSDate *date = [inputFormatter dateFromString:string];

[inputFormatter release];

return date;

}



+ (NSString *)stringFromDate:(NSDate *)date withFormat:(NSString *)format {

return [date stringWithFormat:format];

}



+ (NSString *)stringFromDate:(NSDate *)date {

return [date string];

}



+ (NSString *)stringForDisplayFromDate:(NSDate *)date prefixed:(BOOL)prefixed {

NSDate *today = [NSDatedate];

NSCalendar *calendar = [NSCalendar currentCalendar];

NSDateComponents*offsetComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)

fromDate:today];

NSDate *midnight = [calendar dateFromComponents:offsetComponents];

NSDateFormatter *displayFormatter = [[NSDateFormatter alloc]init];

NSString *displayString = nil;

// comparing against midnight

if ([date compare:midnight] == NSOrderedDescending) {

if (prefixed) {

[displayFormatter setDateFormat:@"'at' h:mm a"]; // at 11:30 am

} else {

[displayFormatter setDateFormat:@"h:mm a"]; // 11:30 am

}

} else {

// check if date is within last 7 days

NSDateComponents *componentsToSubtract = [[NSDateComponentsalloc] init];

[componentsToSubtract setDay:-7];

NSDate *lastweek = [calendar dateByAddingComponents:componentsToSubtract toDate:today options:0];

[componentsToSubtract release];

if ([date compare:lastweek] == NSOrderedDescending) {

[displayFormatter setDateFormat:@"EEEE"]; // Tuesday

} else {

// check if same calendar year

NSInteger thisYear = [offsetComponents year];

NSDateComponents*dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)

fromDate:date];

NSInteger thatYear = [dateComponents year];

if (thatYear >= thisYear) {

[displayFormatter setDateFormat:@"MMM d"];

} else {

[displayFormatter setDateFormat:@"MMM d, yyyy"];

}

}

if (prefixed) {

NSString *dateFormat = [displayFormatter dateFormat];

NSString *prefix = @"'on' ";

[displayFormatter setDateFormat:[prefix stringByAppendingString:dateFormat]];

}

}

// use display formatter to return formatted date string

displayString = [displayFormatter stringFromDate:date];

[displayFormatter release];

return displayString;

}
+ (NSString *)stringForDisplayFromDate:(NSDate *)date {

return[self stringForDisplayFromDate:date prefixed:NO];

}
- (NSString *)stringWithFormat:(NSString *)format {

NSDateFormatter *outputFormatter = [[NSDateFormatter alloc]init];

[outputFormatter setDateFormat:format];

NSString *timestamp_str = [outputFormatter stringFromDate:self];

[outputFormatter release];

return timestamp_str;

}
- (NSString *)string {

return[self stringWithFormat:[NSDatedbFormatString]];

}
- (NSString *)stringWithDateStyle:(NSDateFormatterStyle)dateStyle timeStyle:(NSDateFormatterStyle)timeStyle {

NSDateFormatter *outputFormatter = [[NSDateFormatter alloc]init];

[outputFormatter setDateStyle:dateStyle];

[outputFormatter setTimeStyle:timeStyle];

NSString *outputString = [outputFormatter stringFromDate:self];

[outputFormatter release];

return outputString;

}
- (NSDate *)beginningOfWeek {

// largely borrowed from "Date and Time Programming Guide for Cocoa"

// we'll use the default calendar and hope for the best

NSCalendar *calendar = [NSCalendar currentCalendar];

NSDate *beginningOfWeek = nil;

BOOLok = [calendar rangeOfUnit:NSWeekCalendarUnit startDate:&beginningOfWeek

interval:NULL forDate:self];
if (ok) {
return beginningOfWeek;
}
// couldn't calc via range, so try to grab Sunday, assuming gregorian style
// Get the weekday component of the current date
NSDateComponents*weekdayComponents = [calendar components:NSWeekdayCalendarUnit fromDate:self];
NSDateComponents *componentsToSubtract = [[NSDateComponentsalloc] init];

[componentsToSubtract setDay: 0 - ([weekdayComponents weekday] - 1)];
beginningOfWeek = nil;
beginningOfWeek = [calendar dateByAddingComponents:componentsToSubtract toDate:selfoptions:0];
[componentsToSubtract release];
//normalize to midnight, extract the year, month, and day components and create a new date from those components.
NSDateComponents*components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)
fromDate:beginningOfWeek];

return [calendar dateFromComponents:components];
}
- (NSDate *)beginningOfDay {
NSCalendar *calendar = [NSCalendar currentCalendar];
// Get the weekday component of the current date
NSDateComponents*components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)
fromDate:self];
return [calendar dateFromComponents:components];
}
- (NSDate *)endOfWeek {
NSCalendar *calendar = [NSCalendar currentCalendar];
// Get the weekday component of the current date
NSDateComponents*weekdayComponents = [calendar components:NSWeekdayCalendarUnit fromDate:self];
NSDateComponents *componentsToAdd = [[NSDateComponents alloc]init];
// to get the end of week for a particular date, add (7 - weekday) days
[componentsToAdd setDay:(7 - [weekdayComponents weekday])];
NSDate *endOfWeek = [calendar dateByAddingComponents:componentsToAdd toDate:selfoptions:0];
[componentsToAdd release];
return endOfWeek;
}
+ (NSString *)dateFormatString {
return @"yyyy-MM-dd";
}
+ (NSString *)timeFormatString {
return @"HH:mm:ss";
}
+ (NSString *)timestampFormatString {
return @"yyyy-MM-dd HH:mm:ss";
}
// preserving for compatibility
+ (NSString *)dbFormatString {
return[NSDate timestampFormatString];
}

@end

分享到:
评论

相关推荐

    仿iphone日期选择器,开始时间和结束时间选择

    标题中的"仿iPhone日期选择器,开始时间和结束时间选择"指的是创建一个UI组件,它模仿了苹果设备上的日期选择器,并允许用户分别选择开始日期和结束日期。 苹果原生的日期选择器(UIDatePicker)通常只能单独选择一...

    Android仿iPhone的日期时间选择器

    在Android开发中,为了提供与iOS相似的用户体验,有时我们需要创建一个仿iPhone样式的日期时间选择器。这个组件通常用于让用户方便地选取特定的日期和时间。本文将深入探讨如何在Android平台上实现这样一个功能,...

    iphone去掉锁屏日期时间 含教程

    "iphone去掉锁屏日期时间"这个主题旨在帮助用户优化锁屏界面,使其更加简洁,提升视觉效果。本教程将详细讲解如何在iPhone上移除锁屏上的日期和时间,让屏幕看起来更加干净、专业。 首先,我们需要了解的是,iOS...

    NSDate,iphone显示时间,日期的方法集合

    另外,`NSCalendar`类可以帮助处理与日历相关的任务,如获取星期几、判断日期是否在某日期范围之内等。`NSTimeInterval`是一个双精度浮点数,表示秒数,常用于计算两个`NSDate`之间的差值。 总结起来,`NSDate`是...

    android仿iPhone的日期时间选择器

    在Android开发中,为了提供与iOS类似的用户体验,开发者有时会需要创建一个仿iPhone样式的日期时间选择器。本文将深入探讨如何在Android平台上实现这样一个功能,主要涉及Android自定义视图、DialogFragment以及时间...

    Android仿Iphone样式的时间、日期选择器

    在Android开发中,为了提供与iOS相似的用户体验,开发者经常需要实现类似iPhone样式的日期和时间选择器。这种选择器通常包含两个独立的部分:一个用于选择日期,另一个用于选择时间。在iOS中,这些选择器被称为`...

    android 仿iphone滚动选择日期/时间

    如题android 仿iphone滚动选择日期/时间 也是网上下载,然后稍微改动发上来的.. 可用.不要怪我心狠, 我也下了好几个才找到的..如果有下载过类似的日期选择demo,请慎重下载以免重复...

    iphone 时间控件

    iPhone上的时间控件遵循苹果的iUI设计规范,提供了直观且一致的用户体验。在这个主题中,我们将深入探讨iPhone时间控件的使用、设计特点以及如何在应用中实现它。 1. **时间控件的设计** iPhone的时间控件呈现出...

    仿iphone日期选择自定义控件

    在iOS应用开发中,创建一个仿iPhone日期选择的自定义控件是一项常见的需求。这个控件通常用于让用户方便地选取特定的日期和时间,比如在预订、设置提醒或记录事件时。在这里,我们将深入探讨如何实现这样一个功能...

    仿iPhone日期选择器

    `datePickerMode`属性用于设置日期选择器的模式,例如日期、时间和日期时间。 2. **日期格式化** 选择的日期和时间通常需要转换为字符串显示在界面上,这需要用到`NSDateFormatter`类。设置相应的日期和时间格式...

    仿iphone时间滑轮

    在iOS系统中,苹果的iPhone设备使用了一种独特的时间选择器,被称为"时间滑轮",它提供了直观且高效的方式来选择日期、时间或者其它数值。现在我们将深入探讨如何在Android平台上实现一个仿iPhone时间滑轮的功能。 ...

    仿iphone滚动日期选择框

    7. 数据绑定:在实际应用中,选择的日期和时间可能需要与数据模型绑定,这可以通过使用MVVM(Model-View-ViewModel)架构和数据绑定库实现。选择的日期和时间可以作为ViewModel的属性,View通过双向数据绑定直接反映...

    仿Iphone日期选择器

    在iOS应用开发中,苹果设备的用户界面设计和交互方式有着独特的风格,其中之一就是日期选择器(DatePicker)。这个组件在很多场景下都会被用到,比如设置生日、选择时间等。"仿Iphone日期选择器"是针对Android平台的...

    仿iPhone时间滚轮效果

    它能够处理日期、时间或数值等预设选项的选择任务,为用户提供直观的滚动选择体验。尽管在测试中发现了一个在加载大量数据时出现的默认选择项错乱的小bug,该控件仍然被认定为具有学习与改进的价值,因为其背后的...

    仿iPhone时间选择控件,用于触摸屏的日期选择器jQuery插件

    一个用于触摸设备(Android phones, iPhone, iPad, Galaxy Tab)的日期和时间选择器jQuery插件。可以让用户很方便的只需要滑动数字既可以选择日期。Mobiscroll作为一款jQuery日期插件可以让用户自定义主题,完全通过...

    模拟iPhone提醒事项日历选择控件

    它通常由一个日历视图和一个时间选择器组成,用户可以通过滑动查看不同的月份,点击某一天来设定日期,同时提供一个月份内的快速选择选项。在Android中,我们可以使用`CalendarView`类作为基础,但它并不完全符合...

    iphone锁屏去除时间背景以及滑块背景

    在iOS系统中,iPhone的锁屏界面是用户与设备交互的重要入口,其设计通常包括时间显示、日期、天气信息以及解锁滑块等元素。对于一些追求个性化或者希望简化锁屏界面的用户,可能会想要去除锁屏上的时间背景及滑块...

    类似iphone的 js日期选择控件

    "类似iPhone的JS日期选择控件"是一个专题,旨在为网页应用提供与苹果iPhone设备上日期选择器相似的功能,提升用户体验。这样的控件通常是基于JavaScript实现,允许用户在网页上方便地选择日期,而无需离开当前页面或...

    仿iPhone的时间轮的工具Demo

    为了让时间轮显示实际的小时、分钟或日期,需要将数据模型与视图进行绑定。可以使用`MVVM`(Model-View-ViewModel)设计模式,创建一个ViewModel来存储和处理数据,视图则根据ViewModel的数据更新显示。 5. **用户...

    IPHONE激活时间激活号码查询

    首先,iPhone的激活时间是指该设备首次连接到iTunes或iCloud进行设置和激活的日期。这个信息对于判断设备的新旧程度以及是否被正常使用过非常有用。如果你刚购买了一台iPhone,你可以通过以下步骤查看激活时间: 1....

Global site tag (gtag.js) - Google Analytics