我需要使用Java从

 dd/MM/yyyy  to yyyy/MM/dd


更改日期格式

#1 楼

如何使用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);


评论


仅供参考,麻烦的旧日期时间类(例如java.util.Date,java.util.Calendar和java.text.SimpleTextFormat)现在已被遗留,由java.time类取代。请参见Oracle教程。

–罗勒·布尔克
17年5月8日,3:11

“ Sdf”对我来说听起来很奇怪,因为在法语中它意味着“无家可归的人”。但是,感谢您的解决方案:p

– Y-B原因
4月16日下午5:18

#2 楼

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


这可以解决问题

评论


我有一个dd / MM / yyyy格式的字符串,我该如何转换

–rasi
2010年8月12日16:13



#3 楼

tl; dr

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



避免遗留日期时间类


>
克里斯托弗·帕克(Christopher Parker)的回答是正确的,但已经过时了。现在麻烦的旧日期时间类(例如java.util.Datejava.util.Calendarjava.text.SimpleTextFormat)已被遗留,由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/01/23


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


关于java.time

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

现在处于维护模式的Joda-Time项目建议迁移到java.time类。 />
要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规范是JSR310。

在哪里获取java.time类?



Java SE 8,Java SE 9和更高版本


内置。
具有捆绑实现的标准Java API的一部分。
Java 9增加了一些次要功能和修复。



Java SE 6和Java SE 7


java.time的许多功能在ThreeTen-Backport中都已反向移植到Java 6和7。



Android


ThreeTenABP项目专门针对Android改编了ThreeTen-Backport。
请参阅如何使用ThreeTenABP…。



ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容打下了基础。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuarter等。


Joda-Time

更新:Joda-Time项目现在已经开始在维护模式下,团队建议迁移到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
 


#4 楼

使用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));
    }
}


评论


我可以传递一个字符串至今吗?

–rasi
10年8月12日在16:13

#5 楼

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

#6 楼

这只是克里斯托弗·帕克(Christopher Parker)的答案,适用于使用Java 8中的new1类:

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应该很快发布。

#7 楼

或者您也可以使用正则表达式:

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


它也可以双向工作。当然,这实际上不会验证您的日期,并且也适用于“ 21432/32423/52352”之类的字符串。您可以使用"(\d{2})/(\d{2})/(\d{4}"来更精确地说明每组中的位数,但是它只能在dd / MM / yyyy到yyyy / MM / dd范围内工作,而不再相反(并且仍然可以接受其中的无效数字) 45)。如果您给它诸如“ blabla”之类的无效内容,它只会将相同的内容返回。

评论


现在您有两个问题。 ;-)

–安德烈·道尔(Andrzej Doyle)
2010年8月12日在17:11

感谢您非常清楚您的方法的局限性。

– Ole V.V.
'18 Sep 2'在7:01

#8 楼

更改日期格式的多种方法

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


#9 楼

要更改日期格式,您需要同时使用以下两种格式。

 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

#10 楼

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