Получить время с часами, минутами, секундами, миллисекундами, микросекундами - PullRequest
4 голосов
/ 17 января 2012

У меня есть этот код:

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

Я знаю, что этот код возвращает час, минуту, секунду во времени. Как я могу получить также миллисекунды и микросекунды ??

Ответы [ 7 ]

6 голосов
/ 17 января 2012

У вас не будет микросекунд, потому что Date хранит количество миллисекунд с 1 января 1970 года. Для миллисекунд используйте S, как описано в в javadoc .

5 голосов
/ 17 января 2012

Единственный способ получить микросекунды - разобрать строку самостоятельно.Примечание: Date следует использовать для хранения микросекунд, но вы можете использовать long.(который вы также можете использовать для миллисекунд или нано-секунд)

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

печатает

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

Вы можете сделать то же самое, если вам нужны нано-тайминги.

2 голосов
/ 17 января 2012

Лучшее, что вы можете сделать, это:

SimpleDateFormat sDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
1 голос
/ 17 января 2012

Вы можете показать только миллисекунду: :SS.

0 голосов
/ 17 января 2012

Обычно миллисекунды даны с заглавной буквы s, и в вашем случае это будет yyyy-MM-dd HH:mm:ss:SSS. Для получения дополнительной информации см. Настройка форматов

0 голосов
/ 17 января 2012

Этот пример получает миллисекунду. Микросекунды не доступны.

Date someDate = sDate.parse(dateString);
Calendar c = Calendar.setTime(someDate);
int millisecond = c.get(Calendar.MILLISECOND);
0 голосов
/ 17 января 2012

Проверьте Java-документ SimpleDateFormat, он говорит: Миллисекунда: S

Микросекунды недоступны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...