如何在Java中更改日期格式?

时间:2010-08-12 15:47:45

标签: java date

我需要使用Java从

更改日期格式
 dd/MM/yyyy  to yyyy/MM/dd

10 个答案:

答案 0 :(得分:124)

如何使用SimpleDateFormat从一种日期格式转换为另一种日期格式:

final String OLD_FORMAT = "dd/MM/yyyy";
final String NEW_FORMAT = "yyyy/MM/dd";

// August 12, 2010
String oldDateString = "12/08/2010";
String newDateString;

SimpleDateFormat sdf = new SimpleDateFormat(OLD_FORMAT);
Date d = sdf.parse(oldDateString);
sdf.applyPattern(NEW_FORMAT);
newDateString = sdf.format(d);

答案 1 :(得分:24)

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
sdf.format(new Date());

这应该可以解决问题

答案 2 :(得分:10)

TL;博士

LocalDate.parse( 
    "23/01/2017" ,  
    DateTimeFormatter.ofPattern( "dd/MM/uuuu" , Locale.UK ) 
).format(
    DateTimeFormatter.ofPattern( "uuuu/MM/dd" , Locale.UK )
)
  

2017年1月23日

避免遗留日期时间类

answer by Christopher Parker是正确但过时的。麻烦的旧日期时间类,例如java.util.Datejava.util.Calendarjava.text.SimpleTextFormat现在是legacy,取代了java.time类。

使用java.time

将输入字符串解析为日期时间对象,然后以所需格式生成新的String对象。

LocalDate类表示没有时间且没有时区的仅限日期的值。

DateTimeFormatter fIn = DateTimeFormatter.ofPattern( "dd/MM/uuuu" , Locale.UK );  // As a habit, specify the desired/expected locale, though in this case the locale is irrelevant.
LocalDate ld = LocalDate.parse( "23/01/2017" , fIn );

为输出定义另一个格式化程序。

DateTimeFormatter fOut = DateTimeFormatter.ofPattern( "uuuu/MM/dd" , Locale.UK );
String output = ld.format( fOut );
  

2017年1月23日

顺便说一下,考虑对表示日期时间值的字符串使用标准ISO 8601格式。


关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore


约达时间

更新 Joda-Time项目现在位于maintenance mode,团队建议迁移到java.time课程。这部分是为了历史而留下的。

为了好玩,这是他的代码适合使用Joda-Time库。

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;

final String OLD_FORMAT = "dd/MM/yyyy";
final String NEW_FORMAT = "yyyy/MM/dd";

// August 12, 2010
String oldDateString = "12/08/2010";
String newDateString;

DateTimeFormatter formatterOld = DateTimeFormat.forPattern(OLD_FORMAT);
DateTimeFormatter formatterNew = DateTimeFormat.forPattern(NEW_FORMAT);
LocalDate localDate = formatterOld.parseLocalDate( oldDateString );
newDateString = formatterNew.print( localDate );

转储到控制台...

System.out.println( "localDate: " + localDate );
System.out.println( "newDateString: " + newDateString );

跑步时......

localDate: 2010-08-12
newDateString: 2010/08/12

答案 3 :(得分:9)

使用SimpleDateFormat

    String DATE_FORMAT = "yyyy/MM/dd";
    SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
    System.out.println("Formated Date " + sdf.format(date));

完整示例:

import java.text.SimpleDateFormat;
import java.util.Date;

public class JavaSimpleDateFormatExample {
    public static void main(String args[]) {
        // Create Date object.
        Date date = new Date();
        // Specify the desired date format
        String DATE_FORMAT = "yyyy/MM/dd";
        // Create object of SimpleDateFormat and pass the desired date format.
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        /*
         * Use format method of SimpleDateFormat class to format the date.
         */
        System.out.println("Today is " + sdf.format(date));
    }
}

答案 4 :(得分:3)

SimpleDateFormat newDateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date myDate = newDateFormat.parse("28/12/2013");
newDateFormat.applyPattern("yyyy/MM/dd")
String myDateString = newDateFormat.format(myDate);

现在MyDate = 2013/12/28

答案 5 :(得分:2)

这只是克里斯托弗·帕克的answer,适合使用Java 8中新的 1 类:

final DateTimeFormatter OLD_FORMATTER = DateTimeFormatter.ofPattern("dd/MM/yyyy");
final DateTimeFormatter NEW_FORMATTER = DateTimeFormatter.ofPattern("yyyy/MM/dd");

String oldString = "26/07/2017";
LocalDate date = LocalDate.parse(oldString, OLD_FORMATTER);
String newString = date.format(NEW_FORMATTER);

1井,不再是新的,Java 9应该很快发布。

答案 6 :(得分:1)

或者你可以走正则路线:

String date = "10/07/2010";
String newDate = date.replaceAll("(\\d+)/(\\d+)/(\\d+)", "$3/$2/$1");
System.out.println(newDate);

它也有两种方式。当然,这实际上不会验证您的日期,也适用于像“21432/32423/52352”这样的字符串。您可以使用"(\\d{2})/(\\d{2})/(\\d{4}"更准确地表示每个组中的位数,但它只能从dd / MM / yyyy到yyyy / MM / dd,而不是相反(并且仍然接受无效)那里的数字就像45)。如果你给它一些无效的东西,比如“blabla”那么它将会返回同样的东西。

答案 7 :(得分:1)

更改日期格式的方法很多

private final String dateTimeFormatPattern = "yyyy/MM/dd";
private final Date now = new Date();  

final DateFormat format = new SimpleDateFormat(dateTimeFormatPattern);  
final String nowString = format.format(now);   

 final Instant instant = now.toInstant();  
 final DateTimeFormatter formatter =  
      DateTimeFormatter.ofPattern(  
         dateTimeFormatPattern).withZone(ZoneId.systemDefault());  
 final String formattedInstance = formatter.format(instant);  

  /* Java 8 needed*/
  LocalDate date = LocalDate.now();
  String text = date.format(formatter);
  LocalDate parsedDate = LocalDate.parse(text, formatter);

答案 8 :(得分:0)

更改您拥有的日期格式要求两种格式如下所示。

 String stringdate1 = "28/04/2010";  

 try {

     SimpleDateFormat format1 = new SimpleDateFormat("dd/MM/yyyy");
     Date date1 = format1.parse()
     SimpleDateFormat format2 = new SimpleDateFormat("yyyy/MM/dd");

     String stringdate2 = format2.format(date1);
    } catch (ParseException e) {
   e.printStackTrace();
}

此处stringdate2的日期格式为yyyy/MM/dd。它包含2010/04/28

答案 9 :(得分:-1)

SimpleDateFormat format1 = new SimpleDateFormat("yyyy/MM/dd");
System.out.println(format1.format(date));