Подтвердить что ты не робот

Преобразование секунд в дни, минуты и часы в Obj-c

В objective-c, как я могу преобразовать целое число (представляющее секунды) в дни, минуты, часы?

Спасибо!

4b9b3361

Ответ 1

В этом случае вам просто нужно разделить.

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 поможет вам здесь.

Ответ 2

попробуйте это,

int forHours = seconds / 3600, 
remainder = seconds % 3600, 
forMinutes = remainder / 60, 
forSeconds = remainder % 60;

и вы можете использовать его для получения более подробной информации как дни, недели, месяцы и годы, следуя той же процедуре

Ответ 3

Я знаю, что это старый пост, но я все равно хотел поделиться. Следующий код - это то, что я использую.

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 и попробуйте.

Ответ 4

Наиболее предпочтительным способом в 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".

Ответ 5

Используйте встроенную функцию 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;
}

Ответ 6

Просто небольшая модификация для совместимости с 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;

Таким же образом вы можете конвертировать в дни, недели, месяцы, годы

Ответ 7

Это мой алгоритм для преобразования секунд в секунды, минуты и часы (используя только общее количество секунд и соотношение между ними):

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

С помощью этого вы можете добавить нужный вам блок, вам просто нужно рассчитать, какое отношение между секундами и единицей вы хотите. Надеюсь, вы поймете мои объяснения каждого шага. Если нет, просто спросите, и я могу объяснить дальше.

Ответ 8

    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));

Ответ 9

Вы получите дни, часы, минуты и секунды с итоговых секунд (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]);
}

Ответ 10

Попробуйте сделать следующее:

    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" )