В objective-c, как я могу преобразовать целое число (представляющее секунды) в дни, минуты, часы?
Спасибо!
В objective-c, как я могу преобразовать целое число (представляющее секунды) в дни, минуты, часы?
Спасибо!
В этом случае вам просто нужно разделить.
days = num_seconds / (60 * 60 * 24);
num_seconds -= days * (60 * 60 * 24);
hours = num_seconds / (60 * 60);
num_seconds -= hours * (60 * 60);
minutes = num_seconds / 60;
Для более сложных вычислений даты, таких как количество дней в течение десяти миллионов секунд после 3 часов 19 января 1983 года, вы должны использовать класс NSCalendar вместе с NSDateComponents. Руководство по программированию даты и времени Apple поможет вам здесь.
попробуйте это,
int forHours = seconds / 3600,
remainder = seconds % 3600,
forMinutes = remainder / 60,
forSeconds = remainder % 60;
и вы можете использовать его для получения более подробной информации как дни, недели, месяцы и годы, следуя той же процедуре
Я знаю, что это старый пост, но я все равно хотел поделиться. Следующий код - это то, что я использую.
int seconds = (totalSeconds % 60);
int minutes = (totalSeconds % 3600) / 60;
int hours = (totalSeconds % 86400) / 3600;
int days = (totalSeconds % (86400 * 30)) / 86400;
Первая строка. Мы получаем оставшуюся часть секунд при делении на количество секунд в минутах.
Вторая строка. Мы получаем оставшуюся часть секунд после деления на количество секунд в час. Затем мы делим это на несколько секунд через минуту.
Третья строка. Мы получаем оставшуюся часть секунд после деления на количество секунд в день. Затем мы делим это на количество секунд в час.
Четвертая строка - мы получаем оставшуюся часть секунды после деления на количество секунд в месяц. Затем мы делим это на количество секунд в день. Мы могли бы просто использовать следующие дни...
int days = totalSeconds / 86400;
Но если бы мы использовали вышеприведенную строку и хотели продолжить работу и получить месяцы, мы получим 1 месяц и 30 дней, когда мы хотим получить всего 1 месяц.
Откройте игровую площадку в Xcode и попробуйте.
Наиболее предпочтительным способом в objective-c может быть этот, как рекомендует Apple в их документе.
NSDate *startDate = [NSDate date];
NSDate *endDate = [NSDate dateWithTimeInterval:(365*24*60*60*3+24*60*60*129) sinceDate:startDate];
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags
fromDate:startDate
toDate:endDate options:0];
NSInteger years = [components year];
NSInteger months = [components month];
NSInteger days = [components day];
NSLog(@"years = %ld months = %ld days = %ld",years,months,days);
Убедитесь, что вы не извлекаете компоненты, не определенные с помощью unitFlags, integer будет "undefined".
Используйте встроенную функцию strftime():
static char timestr[80];
char * HHMMSS ( time_t secs )
{
struct tm ts;
ts = *localtime(&secs);
strftime(timestr, sizeof(timestr), "%a %b %d %H:%M:%S %Y %Z", &ts); // "Mon May 1, 2012 hh:mm:ss zzz"
return timestr;
}
Просто небольшая модификация для совместимости с 32-битным и 64-разрядным. Используя NSInteger
, система будет автоматически конвертировать в int или долгое время на основе 32/64 бит.
NSInteger seconds = 10000;
NSInteger remainder = seconds % 3600;
NSInteger hours = seconds / 3600;
NSInteger minutes = remainder / 60;
NSInteger forSeconds = remainder % 60;
Таким же образом вы можете конвертировать в дни, недели, месяцы, годы
Это мой алгоритм для преобразования секунд в секунды, минуты и часы (используя только общее количество секунд и соотношение между ними):
int S = totalSeconds % BaseSMH
int M = ((totalSeconds - totalSeconds % BaseSMH) % BaseSMH ^ 2) / BaseSMH
int H = (totalSeconds - totalSeconds % BaseSMH - ((totalSeconds - totalSeconds % BaseSMH) % BaseSMH ^ 2)) / BaseSMH ^ 2
И здесь следует мое объяснение:
Время тестирования, преобразованное в секунды: HH: MM: SS = 02:20:10 = > totalSeconds = 2 * 3600 + 20 * 60 + 10 = 7200 + 1200 + 10 = 8410
Основание между секундами → минуты и минуты → часы - 60 (с секунд → часов 60 ± 2 = 3600).
int totalSeconds = 8410
const int BaseSMH = 60
Каждый блок (здесь представленный переменной) можно вычислить, удалив предыдущую единицу (выраженную в секундах) из общего количества секунд и разделив ее на ее соотношение между секундами и единицей, которую мы пытаемся вычислить. Это то, что каждый календарный процесс выглядит следующим образом:
int S = totalSeconds % BaseSMH
int M = ((totalSeconds - S) % BaseSMH ^ 2) / BaseSMH
int H = (totalSeconds - S - M * BaseSMH) / BaseSMH ^ 2
Как и во всех математических вычислениях, теперь мы можем заменить каждую единицу в расчетах минут и часов на то, как мы рассчитали предыдущую единицу, и каждый расчет будет выглядеть следующим образом (помните, что деление на BaseSMH в вычислении M и умножение на BaseSMH в H калибровка отменяет друг друга):
int S = totalSeconds % BaseSMH
int M = ((totalSeconds - totalSeconds % BaseSMH) % BaseSMH ^ 2) / BaseSMH
int H = (totalSeconds - totalSeconds % BaseSMH - ((totalSeconds - totalSeconds % BaseSMH) % BaseSMH ^ 2)) / BaseSMH ^ 2
Тестирование с помощью "totalSeconds" и "BaseSMH" сверху будет выглядеть так:
int S = 8410 % 60
int M = ((8410 - 8410 % 60) % 60 ^ 2) / 60
int H = (8410 - 8410 % 60 - ((8410 - 8410 % 60) % 60 ^ 2)) / 60 ^ 2
Вычисление S:
int S = 8410 % 60 = 10
Вычисление M:
int M = ((8410 - 8410 % 60) % 60 ^ 2) / 60
= ((8410 - 10) % 3600) / 60
= (8400 % 3600) / 60
= 1200 / 60
= 20
Вычисление H:
int H = (8410 - 8410 % 60 - ((8410 - 8410 % 60) % 60 ^ 2)) / 60 ^ 2
= (8410 - 10 - ((8410 - 10) % 3600)) / 3600
= (8400 - (8400 % 3600)) / 3600
= (8400 - 1200) / 3600
= 7200 / 3600
= 2
С помощью этого вы можете добавить нужный вам блок, вам просто нужно рассчитать, какое отношение между секундами и единицей вы хотите. Надеюсь, вы поймете мои объяснения каждого шага. Если нет, просто спросите, и я могу объяснить дальше.
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date dateObj1=null;
Date dateObj2=null;
try {
// String format = "MM/dd/yyyy hh:mm:ss";
dateObj1 = sdf.parse(Appconstant.One_One_time);
dateObj2 = sdf.parse(Appconstant.One_Two_time);
Log.e(TAG, "dateObj12" + dateObj1.toString() + "---" + dateObj2.toString());
DecimalFormat crunchifyFormatter = new DecimalFormat("###,###");
long diff = dateObj2.getTime() - dateObj1.getTime();
/*int diffDays = (int) (diff / (24 * 60 * 60 * 1000));
System.out.println("difference between days: " + diffDays);
int diffhours = (int) (diff / (60 * 60 * 1000));
System.out.println("difference between hours: "
+ crunchifyFormatter.format(diffhours));
int diffmin = (int) (diff / (60 * 1000));
System.out.println("difference between minutes: "
+ crunchifyFormatter.format(diffmin));*/
int diffsec = (int) (diff / (1000));
System.out.println("difference between seconds:"
+ crunchifyFormatter.format(diffsec));
Вы получите дни, часы, минуты и секунды с итоговых секунд (self.secondsLeft)
days = self.secondsLeft/86400;
hours = (self.secondsLeft %86400)/3600;
minutes = (self.secondsLeft % 3600) / 60;
seconds = (self.secondsLeft %3600) % 60;
код ......
[NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(updateCountdown) userInfo:nil repeats: YES];
-(void) updateCountdown {
int days,hours,minutes,seconds;
self.secondsLeft--;
days = self.secondsLeft/86400;
hours = (self.secondsLeft %86400)/3600;
minutes = (self.secondsLeft % 3600) / 60;
seconds = (self.secondsLeft %3600) % 60;
NSLog(@"Time Remaining =%@",[NSString stringWithFormat:@"%02d:%02d:%02d:%02d",days, hours, minutes,seconds]);
}
Попробуйте сделать следующее:
x=int(input("enter a positive integer: "))
sec = int(x % 60);
minu =int((x % 3600) / 60);
ho =int((x % 86400) / 3600);
days =int(x / (60 * 60 * 24));
print(int(days),"days", ho,"hours", minu , "minutes" , sec ,"seconds" )