Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以小时、分钟、秒、毫秒、微秒获取时间_Java_Date - Fatal编程技术网

Java 以小时、分钟、秒、毫秒、微秒获取时间

Java 以小时、分钟、秒、毫秒、微秒获取时间,java,date,Java,Date,我有以下代码: SimpleDateFormat sDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 我知道这段代码返回的时间是小时,分钟,秒。 如何获得毫秒和微秒???您只能显示毫秒::SS 检查SimpleDataFormat的Java文档,它告诉: 毫秒:秒 微秒不可用。您将没有微秒,因为日期存储自1970年1月1日以来的毫秒数。对于毫秒,使用S,如中所述。此示例获得毫秒。微秒不可用 Date someDate = sDate.par

我有以下代码:

SimpleDateFormat sDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
我知道这段代码返回的时间是小时,分钟,秒。
如何获得毫秒和微秒???

您只能显示毫秒:
:SS

检查SimpleDataFormat的Java文档,它告诉: 毫秒:秒


微秒不可用。

您将没有微秒,因为日期存储自1970年1月1日以来的毫秒数。对于毫秒,使用
S
,如中所述。

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

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

您所能做的就是:

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

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

获取微秒的唯一方法是自己解析字符串。注意:
Date
应用于存储微秒,但您可以使用
long
。(也可用于毫秒或纳秒)


如果你需要纳米计时,你也可以这样做。

所以,你认为很明显没有微秒??这不明显,这就是为什么我在回答中解释它。不过,如果您阅读了文档,就很清楚了。你读了吗?@lolo-根据JB Nizet链接到的页面上第一个表格中的“毫秒”来判断?是的,我会这么说。如果有一种通过SimpleDateFormat获取微秒的方法,它就会出现在那个表中。可以做到,请看我的答案。为什么是-2???我看不出有什么理由否决这个问题,当我发布it用户在争论这个问题时,它是-3,然后是+1。。。有时候,用户降低分数仅仅是因为他们的评分很高,如果你知道我的意思的话……我认为这更多的是因为你的态度。+1因为我也看不到任何理由投反对票!嗨,Peter,我知道这是离题的,但很想知道为什么SDF是同步的。@Mahesh SImpleDateFormat不是线程安全的。它在没有同步的情况下通常可以正常工作,但偶尔您会得到一个损坏的值,因为它有可变的字段。
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