1

我正在尝试将 NSString 转换为秒,但我做错了什么。这是我的代码:

_myTextField 中的文本来自 uidatepicker,格式为 HH:mm。

NSString *teste = [[NSString alloc]init];
teste = [_myTextField text];

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

[formatarteste setDateFormat:@"s"];

NSDate *dateFromString = [[NSDate alloc]init];

dateFromString = [formatarteste dateFromString:teste];

NSLog(@"%@", dateFromString);

我总是在 nslog 上得到 i null 结果。在使用 NSLog 之前,我尝试将 dateFromString 转换回字符串,但仍然收到空消息。

按照这里的要求,我使用的更多代码是:

我有一个调用 uidatepicker 的文本字段,它在超级 viewdidload 上加载:

[_myTextField setText:@"03:00"];
UIDatePicker *datepicker = [[UIDatePicker alloc]init];
//[datepicker setDate:[NSDate date]];
[datepicker setDatePickerMode:UIDatePickerModeTime];

[datepicker addTarget:self action:@selector(updateTextField:) forControlEvents:UIControlEventValueChanged];
[self.myTextField setInputView:datepicker];

这是 updateTextfield 函数:

 UIDatePicker *picker = (UIDatePicker*)self.myTextField.inputView;
 NSDateFormatter *formatar = [[NSDateFormatter alloc]init];
 [formatar setDateFormat:@"HH:mm"];


 NSString *textoDoField = [formatar stringFromDate:picker.date];
 self.myTextField.text = [NSString stringWithFormat:@"%@", textoDoField];
4

2 回答 2

5

一种方法(不一定是最简单的)从时间计算自午夜以来的秒数;

// NSString *teste = @"14:52";

NSDateFormatter *formatarteste = [[NSDateFormatter alloc]init];
[formatarteste setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[formatarteste setDateFormat:@"HH:mm"];

NSDate *dateFromString = [formatarteste dateFromString:teste];

NSTimeInterval interval = 
  [dateFromString timeIntervalSinceDate:
    [NSDate dateWithString: @"2000-01-01 00:00:00 +0000"]];

NSLog(@"%f", interval);

// >>> 53520

...或者更直接一些;

// NSString *teste = @"14:52";

int h,m;
const char *bytes = [teste UTF8String];
sscanf(bytes, "%d:%d", &h,&m);

int seconds = h*3600+m*60;

NSLog(@"%d", seconds);

// >>> 53520
于 2013-09-13T17:10:37.567 回答
1

伙计们,我以错误的方式看待这个问题,我不需要将 NSString 转换为 NSDate。

我只需要获取像 03:00 这样的 NSString,将“小时”与“分钟”分开,然后,我将小时 x 3600 和分钟 x 60 相乘,以获取例如 3 小时内的秒数。

这样做的重点是创建一个在确定的时间运行的通知,使用 [NSDate dateWithTimeIntervalSinceNow: NUMBER OF SECONDS FOR THE NOTIFICATION APPEAR];

就是这样!

这是我用来从文本字段字符串中获取秒数的代码:

  NSArray *arrayWithNumberValue = [teste componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@":"]];



NSInteger valorHoras = [arrayWithNumberValue[0] intValue];
NSInteger valorMin = [arrayWithNumberValue[1] intValue];


NSInteger horasEmSegundos = valorHoras * 3600;
NSInteger minEmSegundos = valorMin * 60;


NSInteger proximoAlarme = horasEmSegundos + minEmSegundos;

manualTimer *horamanual = [[manualTimer alloc]init];
[horamanual tempoAlerta:&proximoAlarme];

NSLog(@"%ld", (long)proximoAlarme);
于 2013-09-13T20:51:59.657 回答