26 Stimmen

Umrechnung von Sekunden in Tage, Minuten und Stunden in Obj-c

Wie kann ich in Objective-C eine ganze Zahl (die für Sekunden steht) in Tage, Minuten und Stunden umwandeln?

Danke!

3voto

Tai Le Anh Punkte 268

Nur eine kleine Änderung für beide kompatibel mit 32 Bit & 64 Bit. Verwendung von NSInteger konvertiert das System automatisch in int oder long auf der Grundlage von 32/64 Bit.

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

Auf die gleiche Weise können Sie in Tage, Wochen, Monate und Jahre umrechnen

1voto

Dies ist mein Algorithmus für die Umrechnung von Sekunden in Sekunden, Minuten und Stunden (wobei ich nur die Gesamtzahl der Sekunden und das Verhältnis zwischen den einzelnen Sekunden verwende):

int S = totalSeconds % BaseSMH

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

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

Und hier folgt meine Erklärung dazu:

Testzeit umgerechnet in Sekunden: HH:MM:SS = 02:20:10 => totalSeconds = 2 * 3600 + 20 * 60 + 10 = 7200 + 1200 + 10 = 8410

Die Basis zwischen Sekunden -> Minuten und Minuten -> Stunden ist 60 (von Sekunden -> Stunden ist es 60 ^ 2 = 3600).

int totalSeconds = 8410
const int BaseSMH = 60

Jede Einheit (hier durch eine Variable dargestellt) kann berechnet werden, indem die vorherige Einheit (ausgedrückt in Sekunden) von der Gesamtzahl der Sekunden abgezogen und durch das Verhältnis zwischen Sekunden und der zu berechnenden Einheit geteilt wird. So sieht jede Berechnung nach diesem Algorithmus aus:

int S = totalSeconds % BaseSMH

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

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

Wie bei allen mathematischen Berechnungen können wir nun jede Einheit in den Minuten- und Stundenberechnungen durch die Art und Weise ersetzen, wie wir die vorherige Einheit berechnet haben, und jede Berechnung wird dann wie folgt aussehen (denken Sie daran, dass sich die Division mit BaseSMH in der M-Berechnung und die Multiplikation mit BaseSMH in der H-Berechnung gegenseitig aufheben):

int S = totalSeconds % BaseSMH

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

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

Ein Test mit den obigen Werten "totalSeconds" und "BaseSMH" sieht dann so aus:

int S = 8410 % 60

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

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

Berechnung von S:

int S = 8410 % 60 = 10

Berechnung von M:

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

Berechnung von 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

Damit können Sie jede beliebige Einheit hinzufügen, Sie müssen nur das Verhältnis zwischen Sekunden und der gewünschten Einheit berechnen. Ich hoffe, Sie haben meine Erklärungen zu den einzelnen Schritten verstanden. Wenn nicht, fragen Sie mich einfach und ich kann es weiter erklären.

1voto

timothyzhang Punkte 570

Ursprünglich hatte ich eine ähnliche Lösung wie Fishs Antwort gefunden:

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

Ich habe festgestellt, dass es mit Array verallgemeinert werden kann map() y reduce() Funktionen, da sie einige Iterationen und Rekursionen enthält.

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

Sie können die Funktion ganz einfach erweitern intervalToLevels() zu anderen Messebenen, wie z. B. Flüssigkeitsmasse, Länge usw.

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

0voto

Vela Punkte 67
    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));

0voto

Deepak Nair Punkte 1

Sie erhalten Tage, Stunden, Minuten und Sekunden aus den Gesamtsekunden (self.secondsLeft)

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

Code ......

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X