java 获取小时、分钟、秒、毫秒、微秒时间

li9yvcax  于 2023-02-14  发布在  Java
关注(0)|答案(8)|浏览(164)

我有这个代码:

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

我知道这个代码返回小时,分钟,秒的时间。我怎么能得到也毫秒和微秒?

c0vxltue

c0vxltue1#

您不会有微秒,因为Date存储自1970年1月1日以来的毫秒数。对于毫秒,请使用S,如the javadoc中所述。

rn0zuynd

rn0zuynd2#

获取微秒的唯一方法是自己解析字符串。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

如果您需要纳米计时,也可以采用类似的方法。

webghufk

webghufk3#

你能做的最好的事是:

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

nfeuvbwi4#

您只能显示毫秒::SS.

rseugnpd

rseugnpd5#

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class MyClass
{
    public static void main(String args[]) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss:SSSSS");
        for(int i=0; i<=5;i++) {
            System.out.println("Class 1 : " + ZonedDateTime.now().format(formatter));
        }
    }
}

输出示例:

Class 1 : 19:25:19:77336
Class 1 : 19:25:19:77483
Class 1 : 19:25:19:77487
Class 1 : 19:25:19:77490
Class 1 : 19:25:19:77493
Class 1 : 19:25:19:77496
kxe2p93d

kxe2p93d6#

检查SimpleDateFormat的Java文档,它告诉:毫秒:S型
微秒不可用。

eeq64g8w

eeq64g8w7#

此示例获取毫秒。微秒不可用。

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

roejwanj8#

通常毫秒以大写字母s表示,在您的情况下,它将是yyyy-MM-dd HH:mm:ss:SSS。有关详细信息,请参阅Customizing formats

相关问题