首页 文章

如何获取YYYY-MM-DD中的当前时间HH:MI:Sec.Millisecond格式的Java?

提问于
浏览
519

下面的代码给出了当前时间 . 但它没有告诉任何关于毫秒的事情 .

public static String getCurrentTimeStamp() {
    SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//dd/MM/yyyy
    Date now = new Date();
    String strDate = sdfDate.format(now);
    return strDate;
}

我以 2009-09-22 16:47:08 (YYYY-MM-DD HH:MI:Sec) 格式获取日期 .

但我想以 2009-09-22 16:47:08.128 ((YYYY-MM-DD HH:MI:Sec.Ms)格式检索当前时间 - 其中128表示毫秒 .

SimpleTextFormat 会正常工作 . 这里最低的时间单位是秒,但我怎么得到毫秒?

11 回答

  • 171
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    
  • 95

    您可以简单地以您想要的格式获取它 .

    String date = String.valueOf(android.text.format.DateFormat.format("dd-MM-yyyy", new java.util.Date()));
    
  • 814

    Java 8中的doc将其命名为fraction-of-second,而在Java 6中将其命名为millisecond . 这让我感到困惑

  • 37

    最简单的方法是(在Java 8之前)使用,

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

    SimpleDateFormat不是线程安全的 . 既不是java.util.Date . 这将导致为用户带来潜在的并发问题 . 这些现有设计存在许多问题 . 为了在Java 8中克服这些问题,我们有一个名为java.time的独立包 . 这份Java SE 8 Date and Time文件对此有一个很好的概述 .

    所以在Java 8中,类似下面的内容将起到作用(格式化当前日期/时间),

    LocalDateTime.now()
       .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
    

    有一点需要注意的是它是在受欢迎的第三方库joda-time的帮助下开发的,

    该项目由Joda-Time(Stephen Colebourne)和Oracle的作者在JSR 310下共同领导,并将出现在新的Java SE 8软件包java.time中 .

    但现在 joda-time 已被弃用,并要求用户迁移到新的 java.time .

    请注意,从Java SE 8开始,用户被要求迁移到java.time(JSR-310) - JDK的核心部分,它取代了这个项目

    不管怎么说,

    如果您有一个Calendar实例,可以使用下面的代码将其转换为新的 java.time

    Calendar calendar = Calendar.getInstance();
        long longValue = calendar.getTimeInMillis();         
    
        LocalDateTime date =
                LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());
        String formattedString = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
    
        System.out.println(date.toString()); // 2018-03-06T15:56:53.634
        System.out.println(formattedString); // 2018-03-06 15:56:53.634
    

    如果你有一个Date对象,

    Date date = new Date();
        long longValue2 = date.getTime();
    
        LocalDateTime dateTime =
                LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue2), ZoneId.systemDefault());
        String formattedString = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
    
        System.out.println(dateTime.toString()); // 2018-03-06T15:59:30.278
        System.out.println(formattedString);     // 2018-03-06 15:59:30.278
    

    如果你刚刚有了纪元毫秒,

    LocalDateTime date =
            LocalDateTime.ofInstant(Instant.ofEpochMilli(epochLongValue), ZoneId.systemDefault());
    
  • 4

    使用此选项以指定的格式获取 current time

    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     System.out.print(dateFormat.format(System.currentTimeMillis()));  }
    
  • 0

    Java one liner

    public String getCurrentTimeStamp() {
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());
    }
    

    在JDK8风格

    public String getCurrentLocalDateTimeStamp() {
        return LocalDateTime.now()
           .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
    }
    
  • 5

    试试这个:-

    http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
    Date date = new Date();
    System.out.println(dateFormat.format(date));
    

    要么

    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Calendar cal = Calendar.getInstance();
    System.out.println(dateFormat.format(cal.getTime()));
    
  • 4

    tl;博士

    Instant.now()
           .toString()
    

    2016-05-06T23:24:25.694Z

    ZonedDateTime.now( 
        ZoneId.of( "America/Montreal" ) 
    ).format(  DateTimeFormatter.ISO_LOCAL_DATE_TIME )
     .replace( "T" , " " )
    

    2016-05-06 19:24:25.694

    java.time

    在Java 8及更高版本中,我们在Java 8及更高版本中内置了java.time框架 . 这些新类取代了麻烦的旧java.util.Date/.Calendar类 . 新课程的灵感来自非常成功的Joda-Time框架,旨在作为其继承者,在概念上类似但重新设计 . 由JSR 310定义 . 由ThreeTen-Extra项目扩展 . 见Tutorial .

    要知道,java.time能够nanosecond分辨率(在第二部分9位小数)的,对双方java.util.Date和乔达 - 时间的millisecond分辨率(3位小数) . 因此,当格式化只显示3个小数位时,您可能隐藏数据 .

    如果要从数据中消除任何微秒或纳秒,请截断 .

    Instant instant2 = instant.truncatedTo( ChronoUnit.MILLIS ) ;
    

    解析/生成字符串时,java.time类在默认情况下使用ISO 8601格式 . 最后 ZZulu 的缩写,意思是UTC .

    Instant代表UTC时间轴上的一个时刻,分辨率最高为nanoseconds . Java 8中的Capturing the current moment仅限于milliseconds,Java 9中的新实现可捕获长达纳秒的时间,具体取决于计算机的硬件时钟能力 .

    Instant instant = Instant.now (); // Current date-time in UTC.
    String output = instant.toString ();
    

    2016-05-06T23:24:25.694Z

    用空格替换中间的 T ,用什么都用 Z 替换,以获得所需的输出 .

    String output = instant.toString ().replace ( "T" , " " ).replace( "Z" , "" ; // Replace 'T', delete 'Z'. I recommend leaving the `Z` or any other such [offset-from-UTC][7] or [time zone][7] indicator to make the meaning clear, but your choice of course.
    

    2016-05-06 23:24:25.694

    由于您不关心包含偏移量或时区,因此请将“本地”日期时间与任何特定位置无关 .

    String output = LocalDateTime.now ( ).toString ().replace ( "T", " " );
    

    Joda-Time

    非常成功的Joda-Time库是java.time框架的灵感来源 . 建议在方便时迁移到java.time .

    ISO 8601格式包括毫秒,是Joda-Time 2.4库的默认格式 .

    System.out.println( "Now: " + new DateTime ( DateTimeZone.UTC ) );
    

    跑的时候......

    Now: 2013-11-26T20:25:12.014Z
    

    此外,如果需要,您可以要求毫秒级的秒数作为数字:

    int millisOfSecond = myDateTime.getMillisOfSecond ();
    
  • 0

    为了补充上述答案,这里是一个打印当前时间和日期(包括毫秒)的程序的一个小工作示例 .

    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class test {
        public static void main(String argv[]){
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
            Date now = new Date();
            String strDate = sdf.format(now);
            System.out.println(strDate);
        }
    }
    
  • 21

    我会用这样的东西:

    String.format("%tF %<tT.%<tL", dateTime);
    

    变量 dateTime 可以是任何日期和/或时间值,请参阅JavaDoc for Formatter .

  • 0

    您只需在日期格式字符串中添加毫秒字段:

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

    API doc of SimpleDateFormat详细描述了格式字符串 .

相关问题