Konvertieren Sie von Tagen in Millisekunden


74

Ich möchte eine Funktion erstellen, die die Tage in Millisekunden umwandelt. Das Tagesformat wird als 0,2444 gespeichert. Wie kann es in Millisekunden konvertiert werden?


10
Wie viele Stunden am Tag? Wie viele Minuten in einer Stunde? Wie viele Sekunden in einer Minute? Wie viele Millisekunden pro Sekunde?
Rup

1
0.2444was bedeutet es
Jigar Joshi

@Jigar Joshi bedeutet wahrscheinlich .2444 eines Tages aka 24,44% oder 5,86 Stunden.
Daniel Ryan

6
Oh und vergessen Sie nicht, dass einige Tage 25h, einige 23h und einige sogar 23h59min59sec (Schaltsekunde) sind.
Giraff

1
@giraff - Eine Funktion, die einen Bruchteil eines bestimmten Tages in Millisekunden konvertiert, muss zwei Argumente oder ein implizites Argument (wie "heute") annehmen. Ich habe Schwierigkeiten zu glauben, dass es das ist, was die Anwendung des OP wirklich braucht. (Zum Beispiel würde niemand, der bei klarem Verstand ist, von einem Benutzer verlangen, dass er einen Bruchteil eines Tages in eine Arbeitszeittabelle eingibt, wobei die Anzahl der Stunden an einem bestimmten Tag berücksichtigt wird . Jetzt wissen wir nicht , was die Anwendung des OP ist, aber. ..)
Stephen C

Antworten:


267

Die beste Vorgehensweise hierfür ist meiner Meinung nach:

TimeUnit.DAYS.toMillis(1);     // 1 day to milliseconds.
TimeUnit.MINUTES.toMillis(23); // 23 minutes to milliseconds.
TimeUnit.HOURS.toMillis(4);    // 4 hours to milliseconds.
TimeUnit.SECONDS.toMillis(96); // 96 seconds to milliseconds.

8
Nein, dies sollte nicht als Antwort akzeptiert werden, da DAYS.toMillis nur lange Argumente benötigt und OP Tage im Doppel hat
omubomír

Diese Antwort ist die Antwort, nach der die meisten Leute suchen, aber nicht die Antwort auf OP
OsaSoft

116

Neben den anderen Antworten gibt es auch die TimeUnit- Klasse, mit der Sie eine Zeitdauer in eine andere konvertieren können. Um beispielsweise herauszufinden, wie viele Millisekunden ein Tag ausmacht:

TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS); //gives 86400000

Beachten Sie, dass diese Methode a dauert. longWenn Sie also einen Bruchteil eines Tages haben, müssen Sie ihn mit der Anzahl der Millisekunden an einem Tag multiplizieren.


20

Wird nicht days * 24 * 60 * 60 * 1000ausreichen?


2
Er möchte es wahrscheinlich so lange, also müssen Sie es möglicherweise auch am Ende von einem Doppel abrunden.
Rup

11

24 Stunden = 86400 Sekunden = 86400000 Millisekunden. Multiplizieren Sie einfach Ihre Zahl mit 86400000.


11

Es ist wichtig zu erwähnen, dass diese Methode einmal in 4-5 Jahren aufgrund einer Schaltsekunde ( http://www.nist.gov/pml/div688/leapseconds.cfm ) und der richtigen Formel einen Fehler von 1 Sekunde ergeben kann für diesen Tag wäre

(24*60*60 + 1) * 1000

Es gibt eine Frage Werden Schaltsekunden vom Kalender berücksichtigt? und die Antwort ist nein.

Wenn Sie also super zeitabhängige Software entwerfen, achten Sie auf diese Formel.


1
Nur wenn jemand interessiert ist - es wird 2016 eine
Schaltsekunde geben

3
public static double toMilliSeconds(double day)
{
    return day * 24 * 60 * 60 * 1000;
}

oder als long:

public static long toMilliSeconds(double day)
{
    return (long) (day * 24 * 60 * 60 * 1000);
}

1
int day = 5;
long dayInMilliseconds = day * org.apache.commons.lang.time.DateUtils.MILLIS_PER_DAY

1
Es ist immer besser zu erklären, was Ihre Antwort bedeutet. Bitte nehmen Sie sich ein paar Minuten Zeit, um zu veranschaulichen, wie dieser Code funktioniert
DaFois

1

Sie können diese Dienstprogrammklasse verwenden -

public class DateUtils
{
    public static final long SECOND_IN_MILLIS = 1000;
    public static final long MINUTE_IN_MILLIS = SECOND_IN_MILLIS * 60;
    public static final long HOUR_IN_MILLIS = MINUTE_IN_MILLIS * 60;
    public static final long DAY_IN_MILLIS = HOUR_IN_MILLIS * 24;
    public static final long WEEK_IN_MILLIS = DAY_IN_MILLIS * 7;
}

Wenn Sie an Android Framework arbeiten, dann nur importes (auch genannt DateUtils) unterpackage android.text.format

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.