Convert java.util.Date to String

前端 未结 18 2305
悲&欢浪女
悲&欢浪女 2020-11-22 05:37

I want to convert a java.util.Date object to a String in Java.

The format is 2010-05-30 22:15:52

相关标签:
18条回答
  • 2020-11-22 06:02
    public static void main(String[] args) 
    {
        Date d = new Date();
        SimpleDateFormat form = new SimpleDateFormat("dd-mm-yyyy hh:mm:ss");
        System.out.println(form.format(d));
        String str = form.format(d); // or if you want to save it in String str
        System.out.println(str); // and print after that
    }
    
    0 讨论(0)
  • 2020-11-22 06:03

    If you only need the time from the date, you can just use the feature of String.

    Date test = new Date();
    String dayString = test.toString();
    String timeString = dayString.substring( 11 , 19 );
    

    This will automatically cut the time part of the String and save it inside the timeString.

    0 讨论(0)
  • 2020-11-22 06:05

    tl;dr

    myUtilDate.toInstant()  // Convert `java.util.Date` to `Instant`.
              .atOffset( ZoneOffset.UTC )  // Transform `Instant` to `OffsetDateTime`.
              .format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )  // Generate a String.
              .replace( "T" , " " )  // Put a SPACE in the middle.
    

    2014-11-14 14:05:09

    java.time

    The modern way is with the java.time classes that now supplant the troublesome old legacy date-time classes.

    First convert your java.util.Date to an Instant. The Instant class represents a moment on the timeline in UTC with a resolution of nanoseconds (up to nine (9) digits of a decimal fraction).

    Conversions to/from java.time are performed by new methods added to the old classes.

    Instant instant = myUtilDate.toInstant();
    

    Both your java.util.Date and java.time.Instant are in UTC. If you want to see the date and time as UTC, so be it. Call toString to generate a String in standard ISO 8601 format.

    String output = instant.toString();  
    

    2014-11-14T14:05:09Z

    For other formats, you need to transform your Instant into the more flexible OffsetDateTime.

    OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
    

    odt.toString(): 2020-05-01T21:25:35.957Z

    See that code run live at IdeOne.com.

    To get a String in your desired format, specify a DateTimeFormatter. You could specify a custom format. But I would use one of the predefined formatters (ISO_LOCAL_DATE_TIME), and replace the T in its output with a SPACE.

    String output = odt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
                       .replace( "T" , " " );
    

    2014-11-14 14:05:09

    By the way I do not recommend this kind of format where you purposely lose the offset-from-UTC or time zone information. Creates ambiguity as to the meaning of that string’s date-time value.

    Also beware of data loss, as any fractional second is being ignored (effectively truncated) in your String’s representation of the date-time value.

    To see that same moment through the lens of some particular region’s wall-clock time, apply a ZoneId to get a ZonedDateTime.

    ZoneId z = ZoneId.of( "America/Montreal" );
    ZonedDateTime zdt = instant.atZone( z );
    

    zdt.toString(): 2014-11-14T14:05:09-05:00[America/Montreal]

    To generate a formatted String, do the same as above but replace odt with zdt.

    String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
                       .replace( "T" , " " );
    

    2014-11-14 14:05:09

    If executing this code a very large number of times, you may want to be a bit more efficient and avoid the call to String::replace. Dropping that call also makes your code shorter. If so desired, specify your own formatting pattern in your own DateTimeFormatter object. Cache this instance as a constant or member for reuse.

    DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" );  // Data-loss: Dropping any fractional second.
    

    Apply that formatter by passing the instance.

    String output = zdt.format( f );
    

    About java.time

    The java.time framework is built into Java 8 and later. These classes supplant the troublesome old date-time classes such as java.util.Date, .Calendar, & java.text.SimpleDateFormat.

    The Joda-Time project, now in maintenance mode, advises migration to java.time.

    To learn more, see the Oracle Tutorial. And search Stack Overflow for many examples and explanations.

    Much of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport and further adapted to Android in ThreeTenABP (see How to use…).

    The ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time.

    0 讨论(0)
  • 2020-11-22 06:06

    In single shot ;)

    To get the Date

    String date = new SimpleDateFormat("yyyy-MM-dd",   Locale.getDefault()).format(new Date());
    

    To get the Time

    String time = new SimpleDateFormat("hh:mm", Locale.getDefault()).format(new Date());
    

    To get the date and time

    String dateTime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.getDefaut()).format(new Date());
    

    Happy coding :)

    0 讨论(0)
  • 2020-11-22 06:06
    Date date = new Date();
    String strDate = String.format("%tY-%<tm-%<td %<tH:%<tM:%<tS", date);
    
    0 讨论(0)
  • 2020-11-22 06:08

    It looks like you are looking for SimpleDateFormat.

    Format: yyyy-MM-dd kk:mm:ss

    0 讨论(0)
提交回复
热议问题