任何人都可以告诉我为什么我不能从这个字符串"2010-11-01"获得正确的NSDate?
我有以下代码:
self.formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:timeZone];
[formatter setDateFormat:@"YYYY-MM-dd hh:mm:ss a z"];
timeStampForCity = [formatter stringFromDate:[NSDate date]];
NSLog(@"%@", timeStampForCity);
updateDate = [formatter dateFromString:timeStampForCity];
NSLog(@"%@", updateDate);
Run Code Online (Sandbox Code Playgroud)
NSLog(@"%@", timeStampForCity); 输出:
2011-08-01 10:05:50 PM EDT
Run Code Online (Sandbox Code Playgroud)
但是NSLog(@"%@", updateDate);产出:
2011-08-02 02:05:50 +0000
Run Code Online (Sandbox Code Playgroud)
我需要updateDate在当前时区中显示时间(例如,如第一个NSLog()输出中所示).我该怎么做呢?
编辑1
我也有这个代码:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit| NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSTimeZoneCalendarUnit;
NSDateComponents *dateComponents = [gregorian components:unitFlags fromDate:[NSDate date]];
[dateComponents setTimeZone:[NSTimeZone timeZoneWithName:cityNameFormatted]];
updateDate = [gregorian dateFromComponents:dateComponents]; …Run Code Online (Sandbox Code Playgroud) double duration = 20; // duration is in seconds
NSDate* durationDate = [[NSDate alloc]initWithTimeIntervalSinceReferenceDate:duration];
NSDateFormatter *formatter = nil;
formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"mm:ss"];
NSString *durationString=[formatter stringFromDate:durationDate];//here durationString should have 20
Run Code Online (Sandbox Code Playgroud)
但我到了30:20?从这里加入30分钟.我试过给出更大的数字然后同样的结果
请让我知道对此的想法以及如何解决这个问题
场景:
我有跟踪iOS应用程序的费用,我将费用从费用明细视图控制器存储到表视图(带有提取结果控制器),显示费用列表以及类别和金额和日期.我的实体"Money"中有一个日期属性,它是费用或收入的父实体.
题:
我想要的是基本上按月分类我的费用并将其显示为部分标题,例如:(2012年11月1日 - 11月30日),它显示根据特定月份的费用金额和相关的东西.在该视图中提供了两个按钮,如果我按下右按钮,它将使月份增加一个月(2012年12月1日 - 12月31日),同样左按钮会将月份减少一个月.
我怎么做到这一点?我正在尝试以下代码 - 这有点工作.假设我的当前部分标题为(2012年11月1日 - 11月30日),当我按下左按钮时,它给出了截面标题(2012年10月1日 - 10月30日),这是错误的,它应该是2012年10月31日而不是2012年10月30日.
- (NSDate *)firstDateOfTheMonth
{
self.startDate = [NSDate date];
NSCalendar* calendar = [NSCalendar currentCalendar];
[calendar setTimeZone:[NSTimeZone localTimeZone]];
NSDateComponents* components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:self.startDate];
[components setDay:1];
firstDateOfTheMonth = [[calendar dateFromComponents:components] retain];
return firstDateOfTheMonth;
}
- (NSDate *)lastDateOfTheMonth
{
NSCalendar* calendar = [NSCalendar currentCalendar];
[calendar setTimeZone:[NSTimeZone localTimeZone]];
NSDateComponents* components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:firstDateOfTheMonth];
[components setMonth:[components month]+1];
[components setDay:0];
lastDateOfTheMonth = [[calendar dateFromComponents:components] retain];
return lastDateOfTheMonth;
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个名为"monthCalculation"的方法,我在其中调用上述两种方法.
- …Run Code Online (Sandbox Code Playgroud) 我想从NSString转换为NSDate对象.我的字符串是:@"01/01/2013.
以下是将字符串转换为NSDate的代码:
- (NSDate*) formatDateTimeFromString: (NSString* ) string{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy"];
NSDate* date= [dateFormatter dateFromString:string ];
return date;
}
Run Code Online (Sandbox Code Playgroud)
我调试函数,看到日期对象总是为零.我有什么错吗?
自今年年底以来,我有一些问题将NSString转换为NSDate.代码之前一直很好用,但它突然开始表现得很奇怪......
例如,2013-01-05在转换为NSDate时变为2014-01-05.
因为它整整一年都不觉得它是时区令人讨厌的.
2012年的日期并没有这样做.
有没有人知道可能出错的是什么?
代码:NSString*dateString = postInfo.noteDate; NSString*newDateString = [dateString substringToIndex:10];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"YYYY-MM-dd"];
NSDate *date = [[NSDate alloc] init];
date = [dateFormat dateFromString:newDateString];
Run Code Online (Sandbox Code Playgroud)
newDateString返回2013-01-05
日期返回2014-01-05
我有一个NSDate12小时格式的对象2014-09-16 04:40:05 pm +0000.
我想将其转换为24小时格式,并希望获得一个像NSDate这样的对象2014-09-16 16:40:05 +0000.
有人可以指导我这样做.
所以我想要一些方法,如:
-(NSDate *) get24HourFormat:(NSDate *) date{
return date object;
}
Run Code Online (Sandbox Code Playgroud) 我有两个NSDates.如何比较它们以确定日期是否在同一周内.
我有一个系统,目前检查两个日期是否在同一天内,并且代码如下:
if calan.compareDate(datee, toDate: now, toUnitGranularity: .CalendarUnitDay) == .OrderedSame {
transactionsToday.addObject(transaction)
}else{
println("No transactions today")
}
Run Code Online (Sandbox Code Playgroud)
我将使用哪个UnitGranularity来检查两个日期是否共享同一周?
当我在iPhone6上运行我的应用程序时,我遇到了一个恼人的错误.
我需要将一小时(由datePicker选取)从12h转换为24h格式.
简单的事!是的,我很确定,但是...我的代码在模拟器上工作,但在设备上没有.
代码如下:
func convertTimeTo24HoursFomratString() -> String {
let dateFormatter = NSDateFormatter()
// isFormatTime24Hours is a static function that returns me if the device has a 24h clock or not. It works fine both on device and on simulator
//if NSDateUtility.isFormatTime24Hours() {
// dateFormatter.dateFormat = "h:mm a"
// return dateFormatter.stringFromDate(self)
//}
dateFormatter.dateFormat = "HH:mm"
return dateFormatter.stringFromDate(self)
}
Run Code Online (Sandbox Code Playgroud)
我哪里做错了?
iOS版本到处都是9.1.
提前感谢您的回答!
[在Paul.s问题之后编辑]
在模拟器上它返回24h格式化日期(右).
在设备上它返回12h格式化日期(错误).
我试图获取我所设置的日期Date,但它比实际日期减少了一天.
let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
let dateComponents = calendar!.components([.Year , .Month , .Weekday, .Day], fromDate: NSDate())
dateComponents.year = 2015
dateComponents.month = 9
dateComponents.day = 1
Run Code Online (Sandbox Code Playgroud)
po calendar!.dateFromComponents(dateComponents)
? Optional(2015-08-31 18:30:00 +0000)
- Some : 2015-08-31 18:30:00 +0000
Run Code Online (Sandbox Code Playgroud) nsdate ×10
ios ×8
objective-c ×5
swift ×3
iphone ×2
cocoa-touch ×1
nscalendar ×1
nstimezone ×1
xcode ×1