Obțineți ora cu ora, minut, secundă, milisecundă, microsecundă (Programare, Java, Data)

lolo a intrebat.

Am acest cod:

SimpleDateFormat sDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Știu că acest cod returnează ora, minutul, secunda în timp.Cum pot obține și milisecunda și microsecunda??

Comentarii

  • Se poate face, vezi răspunsul meu. –  > Por Peter Lawrey.
  • De ce este acest -2???? Nu văd nici un motiv pentru a vota negativ această întrebare –  > Por MedicineMan.
  • Când am publicat-o, utilizatorii se luptau pe ea, a fost -3 și apoi +1… Uneori, utilizatorii reduc punctele doar pentru că au acordat o notă mare, dacă înțelegeți ce vreau să spun… –  > Por lolo.
  • Cred că este vorba mai mult de atitudinea ta. –  > Por Daniel T..
  • +1 pentru că nici eu nu văd niciun motiv de downvote! –  > Por Marc Wellman.
7 răspunsuri
JB Nizet

Nu vei avea microsecunde, pentru că un Date stochează numărul de milisecunde de la 1 ianuarie 1970. Pentru milisecunde, utilizați S, așa cum este documentat în javadoc.

Comentarii

  • Deci, credeți că este atât de evident că nu există microsecunde? –  > Por lolo.
  • Nu este evident și de aceea am explicat în răspunsul meu. Este destul de clar dacă citești documentația, totuși. Ați citit-o? –  > Por JB Nizet.
  • @lolo – Pe baza modului în care scrie „Milisecundă” în primul tabel de pe pagina la care a făcut legătura JB Nizet? Da, aș spune că da. –  > Por Dawood ibn Kareem.
  • Dacă ar fi existat o modalitate de a obține microsecunde prin SimpleDateFormat, ar fi fost acolo, în acel tabel. –  > Por Dawood ibn Kareem.
Peter Lawrey

Singura modalitate de a obține microsecunde este să analizați singur șirul. Notă: Date ar trebui să fie utilizat pentru a stoca microsecundele, dar puteți utiliza un long. (pe care îl puteți folosi și pentru mili-secunde sau nano-secunde)

private static final String YEARS_TO_MINUTES = "yyyy-MM-dd HH:mm";
private static final SimpleDateFormat YEARS_TO_MINUTES_SDF = new SimpleDateFormat(YEARS_TO_MINUTES);

public static long parseMicroSeconds(String text) throws ParseException {
    long timeMS;
    synchronized (YEARS_TO_MINUTES_SDF) {
        timeMS = YEARS_TO_MINUTES_SDF.parse(text.substring(0, YEARS_TO_MINUTES.length())).getTime();
    }
    long microSecs = 0;
    if (text.length() > YEARS_TO_MINUTES.length() + 1) {
        double secs = Double.parseDouble(text.substring(YEARS_TO_MINUTES.length() + 1));
        microSecs = (long) (secs * 1e6 + 0.5);
    }
    return timeMS * 1000 + microSecs;
}

public static String formatMicroSeconds(long timeMicroSeconds) {
    String dateTime;
    synchronized (YEARS_TO_MINUTES_SDF) {
        dateTime = YEARS_TO_MINUTES_SDF.format(new Date(timeMicroSeconds / 1000));
    }
    long secs = timeMicroSeconds % 60000000;
    return dateTime + String.format(":%09.6f", secs / 1e6);
}


public static void main(String... args) throws ParseException {
    String dateTime = "2011-01-17 19:27:59.999650";
    long timeUS = parseMicroSeconds(dateTime);
    for (int i = 0; i < 5; i++)
        System.out.println(formatMicroSeconds(timeUS += 175));
}

tipărește

2011-01-17 19:27:59.999825
2011-01-17 19:28:00.000000
2011-01-17 19:28:00.000175
2011-01-17 19:28:00.000350
2011-01-17 19:28:00.000525

Puteți proceda în mod similar dacă aveți nevoie de nano-timpi.

Comentarii

  • Bună Peter, înțeleg că este în afara subiectului, dar sunt curios să știu de ce a fost sincronizat YEARS_TO_MINUTES_SDF. –  > Por Mahesh.
  • @Mahesh SImpleDateFormat nu este thread safe. De obicei, funcționează bine fără sincronizare, dar din când în când veți obține o valoare coruptă, deoarece are câmpuri mutabile. –  > Por Peter Lawrey.
ante

Cel mai bun lucru pe care îl puteți face este:

SimpleDateFormat sDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

Bozho

Nu poți arăta decât milisecunda: :SS.

Jerome L

Verificați documentul Java al SimpleDateFormat, care spune :Millisecunda : S

Microsecundele nu sunt disponibile.

Buhake Sindi

Acest exemplu obține milisecunde. Microsecundele nu sunt disponibile.

Date someDate = sDate.parse(dateString);
Calendar c = Calendar.setTime(someDate);
int millisecond = c.get(Calendar.MILLISECOND);

Sai Kalyan Kumar Kumar Akshinthala

În general, milisecundele sunt date cu majusculă s, iar în cazul dumneavoastră va fi yyyy-MM-dd HH:mm:ss:SSS. Pentru mai multe informații, consultați Personalizarea formatelor

Tags:,