Change date format in a Java string

I've a String representing a date.

String date_s = "2011-01-18 00:00:00.0";

I'd like to convert it to a Date and output it in YYYY-MM-DD format.

2011-01-18

How can I achieve this?


Okay, based on the answers I retrieved below, here's something I've tried:

String date_s = " 2011-01-18 00:00:00.0"; 
SimpleDateFormat dt = new SimpleDateFormat("yyyyy-mm-dd hh:mm:ss"); 
Date date = dt.parse(date_s); 
SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd");
System.out.println(dt1.format(date));

But it outputs 02011-00-1 instead of the desired 2011-01-18 . What am I doing wrong?


Use LocalDateTime#parse() (or ZonedDateTime#parse() if the string happens to contain a time zone part) to parse a String in a certain pattern into a LocalDateTime .

String oldstring = "2011-01-18 00:00:00.0";
LocalDateTime datetime = LocalDateTime.parse(oldstring, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"));

Use LocalDateTime#format() (or ZonedDateTime#format() ) to format a LocalDateTime into a String in a certain pattern.

String newstring = datetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println(newstring); // 2011-01-18

Or , when you're not on Java 8 yet, use SimpleDateFormat#parse() to parse a String in a certain pattern into a Date .

String oldstring = "2011-01-18 00:00:00.0";
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(oldstring);

Use SimpleDateFormat#format() to format a Date into a String in a certain pattern.

String newstring = new SimpleDateFormat("yyyy-MM-dd").format(date);
System.out.println(newstring); // 2011-01-18

See also:

  • Java string to date conversion

  • Update : as per your failed attempt: the patterns are case sensitive . Read the java.text.SimpleDateFormat javadoc what the individual parts stands for. So stands for example M for months and m for minutes. Also, years exist of four digits yyyy , not five yyyyy . Look closer at the code snippets I posted here above.


    Formatting are CASE-SENSITIVE so USE MM for month not mm (this is for minute) and yyyy For Reference you can use following cheatsheet.

    G   Era designator  Text    AD
    y   Year    Year    1996; 96
    Y   Week year   Year    2009; 09
    M   Month in year   Month   July; Jul; 07
    w   Week in year    Number  27
    W   Week in month   Number  2
    D   Day in year Number  189
    d   Day in month    Number  10
    F   Day of week in month    Number  2
    E   Day name in week    Text    Tuesday; Tue
    u   Day number of week (1 = Monday, ..., 7 = Sunday)    Number  1
    a   Am/pm marker    Text    PM
    H   Hour in day (0-23)  Number  0
    k   Hour in day (1-24)  Number  24
    K   Hour in am/pm (0-11)    Number  0
    h   Hour in am/pm (1-12)    Number  12
    m   Minute in hour  Number  30
    s   Second in minute    Number  55
    S   Millisecond Number  978
    z   Time zone   General time zone   Pacific Standard Time; PST; GMT-08:00
    Z   Time zone   RFC 822 time zone   -0800
    X   Time zone   ISO 8601 time zone  -08; -0800; -08:00
    

    Examples:

    "yyyy.MM.dd G 'at' HH:mm:ss z"  2001.07.04 AD at 12:08:56 PDT
    "EEE, MMM d, ''yy"  Wed, Jul 4, '01
    "h:mm a"    12:08 PM
    "hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
    "K:mm a, z" 0:08 PM, PDT
    "yyyyy.MMMMM.dd GGG hh:mm aaa"  02001.July.04 AD 12:08 PM
    "EEE, d MMM yyyy HH:mm:ss Z"    Wed, 4 Jul 2001 12:08:56 -0700
    "yyMMddHHmmssZ" 010704120856-0700
    "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"   2001-07-04T12:08:56.235-0700
    "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"   2001-07-04T12:08:56.235-07:00
    "YYYY-'W'ww-u"  2001-W27-3
    

    The answer is of course to create a SimpleDateFormat object and use it to parse Strings to Date and to format Dates to Strings. If you've tried SimpleDateFormat and it didn't work, then please show your code and any errors you may receive.

    Addendum: "mm" in the format String is not the same as "MM". Use MM for months and mm for minutes. Also, yyyyy is not the same as yyyy. eg,:

    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class FormateDate {
    
        public static void main(String[] args) throws ParseException {
            String date_s = "2011-01-18 00:00:00.0";
    
            // *** note that it's "yyyy-MM-dd hh:mm:ss" not "yyyy-mm-dd hh:mm:ss"  
            SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            Date date = dt.parse(date_s);
    
            // *** same for the format String below
            SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-MM-dd");
            System.out.println(dt1.format(date));
        }
    
    }
    
    链接地址: http://www.djcxy.com/p/18508.html

    上一篇: TimeSpan在C#中的“漂亮时间”格式

    下一篇: 更改Java字符串中的日期格式