son segundos minutos horas fisica ejemplo cómo cuantos convertir como objective-c time

objective c - fisica - Convierta segundos a días, minutos y horas en Obj-c



cómo convertir minutos en horas (11)

En este caso, solo necesitas dividir.

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;

Para cálculos de fecha más sofisticados, como el número de días dentro de los diez millones de segundos después de las 3 p. M. Del 19 de enero de 1983, usaría la clase NSCalendar junto con NSDateComponents. La guía de programación de fecha y hora de Apple lo ayuda aquí.

En objetivo-c, ¿cómo puedo convertir un número entero (que representa segundos) a días, minutos, horas?

¡Gracias!


Este es mi algoritmo para convertir segundos a segundos, minutos y horas (solo usando la cantidad total de segundos y la relación entre cada uno de ellos):

int S = totalSeconds % BaseSMH int M = ((totalSeconds - totalSeconds % BaseSMH) % BaseSMH ^ 2) / BaseSMH int H = (totalSeconds - totalSeconds % BaseSMH - ((totalSeconds - totalSeconds % BaseSMH) % BaseSMH ^ 2)) / BaseSMH ^ 2

Y aquí sigue mi explicación de esto:

Tiempo de prueba convertido a segundos: HH: MM: SS = 02:20:10 => totalesSegundos = 2 * 3600 + 20 * 60 + 10 = 7200 + 1200 + 10 = 8410

La base entre segundos -> minutos y minutos -> horas es 60 (de segundos -> horas es 60 ^ 2 = 3600).

int totalSeconds = 8410 const int BaseSMH = 60

Cada unidad (aquí representada por una variable) puede calcularse eliminando la unidad previa (expresada en segundos) de la cantidad total de segundos y dividiéndola por su relación entre los segundos y la unidad que estamos tratando de calcular. Esto es lo que parece cada calulación usando este algoritmo:

int S = totalSeconds % BaseSMH int M = ((totalSeconds - S) % BaseSMH ^ 2) / BaseSMH int H = (totalSeconds - S - M * BaseSMH) / BaseSMH ^ 2

Como con todas las matemáticas ahora podemos sustituir cada unidad en los cálculos de minutos y horas con la forma en que calculamos la unidad anterior y cada cálculo se verá así (recuerde que dividir con BaseSMH en el cálculo M y multiplicar por BaseSMH en la calibración H cancela uno al otro):

int S = totalSeconds % BaseSMH int M = ((totalSeconds - totalSeconds % BaseSMH) % BaseSMH ^ 2) / BaseSMH int H = (totalSeconds - totalSeconds % BaseSMH - ((totalSeconds - totalSeconds % BaseSMH) % BaseSMH ^ 2)) / BaseSMH ^ 2

Las pruebas con "totalSeconds" y "BaseSMH" desde arriba se verán así:

int S = 8410 % 60 int M = ((8410 - 8410 % 60) % 60 ^ 2) / 60 int H = (8410 - 8410 % 60 - ((8410 - 8410 % 60) % 60 ^ 2)) / 60 ^ 2

Cálculo de S:

int S = 8410 % 60 = 10

Calculando M:

int M = ((8410 - 8410 % 60) % 60 ^ 2) / 60 = ((8410 - 10) % 3600) / 60 = (8400 % 3600) / 60 = 1200 / 60 = 20

Cálculo de 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

Con esto puedes agregar cualquier unidad que desees, solo necesitas calcular cuál es la relación entre segundos y la unidad que deseas. Espero que entiendas mis explicaciones de cada paso. Si no, solo pregunta y puedo explicar más.


Inicialmente, encontré una solución similar a la respuesta de Fish:

const secondsToString = s => { const secondsOfYear = 60 * 60 * 24 * 365; const secondsOfDay = 60 * 60 * 24; const secondsOfHour = 60 * 60; const secondsOfMinute = 60; let y = ~~(s / secondsOfYear); s %= secondsOfYear; let d = ~~(s / secondsOfDay); s %= secondsOfDay; let h = ~~(s / secondsOfHour); s %= secondsOfHour; let m = ~~(s / secondsOfMinute); s %= secondsOfMinute; y = (y > 0 ? (y + ''y '') : ''''); d = (d > 0 ? (d + ''d '') : ''''); h = (h > 0 ? (h + ''h '') : ''''); m = (m > 0 ? (m + ''m '') : ''''); s = (s > 0 ? (s + ''s '') : ''''); return y + d + h + m + s; }

Observé que podría generalizarse con las funciones array map() y reduce() ya que incluye algunas iteraciones y recursiones.

const intervalToLevels = (interval, levels) => { const cbFun = (d, c) => { let bb = d[1] % c[0], aa = (d[1] - bb) / c[0]; aa = aa > 0 ? aa + c[1] : ''''; return [d[0] + aa, bb]; }; let rslt = levels.scale.map((d, i, a) => a.slice(i).reduce((d, c) => d * c)) .map((d, i) => ([d, levels.units[i]])) .reduce(cbFun, ['''', interval]); return rslt[0]; }; const TimeLevels = { scale: [365, 24, 60, 60, 1], units: [''y '', ''d '', ''h '', ''m '', ''s ''] }; const secondsToString = interval => intervalToLevels(interval, TimeLevels);

Es fácil extender la función intervalToLevels() a otros niveles de medición, como masa líquida, longitud, etc.

const LengthLevels = { scale: [1760, 3, 12, 1], units: [''mi '', ''yd '', ''ft '', ''in ''] }; const inchesToString = interval => intervalToLevels(interval, LengthLevels); const LiquidsLevels = { scale: [4, 2, 2, 8, 1], units: [''gal '', ''qt '', ''pt '', ''cup '', ''fl_oz ''] }; const ouncesToString = interval => intervalToLevels(interval, LiquidsLevels);


Intenta hacer lo siguiente:

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


La forma más preferida en Objective-c podría ser esta, como recomienda Apple en su documento.

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

Asegúrese de no recuperar los componentes no definidos con la unidadFlags, entero será "indefinido".


Obtendrá días, horas, minutos y segundos del total de segundos (self.secondsLeft)

days = self.secondsLeft/86400; hours = (self.secondsLeft %86400)/3600; minutes = (self.secondsLeft % 3600) / 60; seconds = (self.secondsLeft %3600) % 60;

Código ......

[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]); }


Sé que esta es una publicación anterior, pero quería compartirla de todos modos. El siguiente código es lo que uso.

int seconds = (totalSeconds % 60); int minutes = (totalSeconds % 3600) / 60; int hours = (totalSeconds % 86400) / 3600; int days = (totalSeconds % (86400 * 30)) / 86400;

Primera línea: obtenemos el resto de segundos al dividir por número de segundos en minutos.

Segunda línea: obtenemos el resto de segundos después de dividir por el número de segundos en una hora. Luego dividimos eso por segundos en un minuto.

Tercera línea: obtenemos el resto de segundos después de dividir por el número de segundos en un día. Luego lo dividimos por el número de segundos en una hora.

Cuarta línea: obtenemos el resto del segundo después de dividir por el número de segundos en un mes. Luego lo dividimos por el número de segundos en un día. Podríamos usar lo siguiente por Días ...

int days = totalSeconds / 86400;

Pero si utilizáramos la línea anterior y quisiéramos continuar y obtener meses, terminaríamos con 1 mes y 30 días cuando quisiéramos obtener solo 1 mes.

Abre un patio de recreo en Xcode y pruébalo.


Solo un poco de modificación para ambos compatibles con 32 bit y 64 bit. Con NSInteger el sistema convertirá automáticamente a int o long basing en 32/64 bit.

NSInteger seconds = 10000; NSInteger remainder = seconds % 3600; NSInteger hours = seconds / 3600; NSInteger minutes = remainder / 60; NSInteger forSeconds = remainder % 60;

De la misma manera puedes convertir a días, semanas, meses o años


Use la función incorporada 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; }


prueba esto,

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

y puede usarlo para obtener más detalles como días, semanas, meses y años siguiendo el mismo procedimiento


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