“Hour” int retirado do nsdate não se comportando como esperado à meia -noite?
-
24-09-2019 - |
Pergunta
Eu sinto que perdi a cabeça. Alguém pode me dizer o que está acontecendo aqui? Além disso, tenho certeza de que há uma maneira melhor de fazer o que estou tentando fazer, mas não estou interessado nisso agora. Eu gostaria de resolver o mistério de por que minhas INTs não estão respondendo à lógica como esperado.
// Set "At: " field close to current time
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH"];
int hour = [[dateFormatter stringFromDate:[NSDate date]] intValue];
[dateFormatter setDateFormat:@"mm"];
int minute = [[dateFormatter stringFromDate:[NSDate date]] intValue];
NSLog(@"currently %i:%i",hour, minute);
if(hour >= 12){ // convert to AM/PM
selectedMeridiem = 1;
if(hour != 12){
hour = hour - 12;
}
}
else{
selectedMeridiem = 0;
if(hour == 0){
hour = 12;
}
}
NSLog(@"test");
selectedHour = hour - 1;
if(selectedHour <= 0){
selectedHour = 11;
}
Quando depurar o código acima com o meu relógio definido para 12: XX AM, o número inteiro "Hour" retornou é 0. Mas, em seguida, qualquer declaração if com a condição se (hora == 0) não for avaliada. Da mesma forma, isso também não seria avaliado: se (hora <1). O código acima coloca a hora INT em outro Int, selecionado (não se preocupe com o motivo de fazer isso por enquanto), mas o SelectedHour sofre do mesmo comportamento estranho; A linha if (selecionadahour <= 0) nunca é avaliada. Estou ficando louco ou sou apenas um idiota? Talvez haja algum comportamento de 0 números inteiros dos quais não estou ciente. Todo o meu código é bom, desde que não seja 12: xx am.
Solução
Foi um problema com a minha instalação do Xcode, com mais curiosidade. Apenas reinstale tudo e está funcionando corretamente agora. Estranho porque estava apenas causando comparações aos números inteiros de valor "0".