更改Java字符串中的日期格式

我有一个代表日期的String

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

我想将其转换为Date并以YYYY-MM-DD格式输出。

2011-01-18

我怎样才能做到这一点?


好的,根据我在下面检索的答案,这里是我尝试过的东西:

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));

但它输出02011-00-1而不是2011-01-18所需的。 我究竟做错了什么?


如果字符串恰好包含时区部分,则使用LocalDateTime#parse() (或ZonedDateTime#parse() )将特定模式的String解析为LocalDateTime

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

使用LocalDateTime#format() (或ZonedDateTime#format() )将LocalDateTime格式化为特定模式的String

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

或者 ,如果您尚未使用Java 8,请使用SimpleDateFormat#parse()将某个特定模式的String解析为Date

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

使用SimpleDateFormat#format()Date格式化为特定模式的String

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

也可以看看:

  • Java字符串到日期的转换

  • 更新 :根据您的失败尝试:模式区分大小写 。 阅读java.text.SimpleDateFormat javadoc单个部件代表什么。 因此,例如M代表几个月, m代表几分钟。 而且,年份有四位数yyyy ,而不是五位yyyyy 。 仔细查看我在上面发布的代码片段。


    格式是CASE-SENSITIVE,所以使用MM的月份不是毫米(这是分钟)和YYYY对于参考,您可以使用以下的备忘单。

    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
    

    例子:

    "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
    

    答案当然是创建一个SimpleDateFormat对象并使用它来分析字符串到日期并将日期格式化为字符串。 如果您尝试过SimpleDateFormat并且无法正常工作,请显示您的代码以及您可能收到的任何错误。

    附录:格式字符串中的“mm”与“MM”不同。 MM用几个月,mm用几分钟。 另外,yyyyy和yyyy不一样。 例如,:

    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/18507.html

    上一篇: Change date format in a Java string

    下一篇: Format TimeSpan greater than 24 hour