改变YYYY / MM / DD – > MM / DD / YYYY java
我希望将我的日期格式更改为MM / DD / YYYY,目前它是YYYY / MM / DD。
我尝试过研究它,但具有讽刺意味的是,它始终是另一种方式。 现在有人可能会说尝试向后尝试从那里工作,但它没有用。
我class上打电话给所有的事情:
import java.util.*; import java.text.*; class Driver { public static void main (String[] args) { Kid kid; Node list = new Node(); kid = createKid("Lexie", 2.6, "11/5/2009"); insertEnd(list, kid); kid = createKid ("Sally", 2.3, "4/8/2009"); insertEnd(list, kid); kid = createKid ("Joe", 2.7, "6/16/2009"); insertEnd(list, kid); kid = createKid ("Bob", 2.2, "1/16/2009"); insertEnd(list, kid); kid = createKid ("Tom", 3.1, "8/16/2009"); insertEnd(list, kid); printList(list); } //end main method public static Kid createKid(String name, double height, String date) { return new Kid(name, height, date); } } //end class import java.util.*; import java.text.SimpleDateFormat; import java.io.*; class Kid { String name; double height; GregorianCalendar bDay; ... /** * Second constructor for kid * Setting instances to equal the constructors of this * @param 1: Setting n (aka name, but it was taken) to equal the instance var of name * @param 2: Setting h (aka height, but it was taken) to equal the instance var of height * @param 3: Setting date to equal the instance var of bDay with some modifications */ public Kid (String n, double h, String date) { StringTokenizer st = new StringTokenizer(date, "/"); this.name = n; this.height = h; this.bDay = new GregorianCalendar(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())); } /** * public String toString() { * Converting Java language to English language */ public String toString() { return (this.name + ", Height: " + this.height + "ft., Born: " + this.bDay.get(Calendar.DATE) + "/" + this.bDay.get(Calendar.MONTH) + "/" + this.bDay.get(Calendar.YEAR)); } } //end class
顺便说一句,我不熟悉简单日期格式类和日期格式类,并且尝试实现它们的尝试都没有成功。
只需使用SimpleDateFormat
将String
转换为Date
。 无需为痛苦的Calendar
API烦恼。
String dateString = "2012/06/05"; Date date = new SimpleDateFormat("yyyy/MM/dd").parse(dateString);
请在整个代码中使用此Date
对象。 每当您需要向人类呈现Date
对象时,只需使用另一个SimpleDateFormat
:
String dateString = new SimpleDateFormat("MM/dd/yyyy").format(date);
TL;博士
String output = LocalDate.parse( "2012/06/05".replace( "/" , "-" ) ).format( DateTimeFormatter.ofLocalizedDate( FormatStyle.SHORT ).withLocale( Locale.US ) ) ;
细节
BalusC的答案是正确的,但现在已经过时了。
旧日期时间类(如Date
和Calendar
现在已成为遗产。 请改用java.time类。
ISO 8601
您的输入字符串几乎符合ISO 8601标准。 只需用连字符替换斜杠字符即可。 默认情况下,java.time类以ISO 8601格式解析/生成字符串,无需定义格式化模式。
String input = "2012/06/05".replace( "/" , "-" );
LocalDate
LocalDate
类表示没有时间且没有时区的仅日期值。
LocalDate ld = LocalDate.parse( input );
要生成ISO 8601格式的输出,只需调用toString
。
String output = ld.toString();
要生成其他格式的String,请使用DateTimeFormatter
。 通常最好通过指定Locale
让该类自动为您Locale
。 Locale
确定(a)翻译的人类语言,(b)资本化,标点符号,部分排序等问题的文化规范。
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.SHORT ) ; f = f.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH etc. String output = ld.format( f );
关于java.time
java.time框架内置于Java 8及更高版本中。 这些类取代了旧的麻烦的日期时间类,如java.util.Date
, .Calendar
和java.text.SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到java.time。
要了解更多信息,请参阅Oracle教程 。 并搜索Stack Overflow以获取许多示例和解释。
大部分java.timefunction都被反向移植到ThreeTen-Backport中的 Java 6和7,并进一步适应了ThreeTenABP中的 Android 。
ThreeTen-Extra项目使用其他类扩展了java.time。 该项目是未来可能添加到java.time的试验场。 您可以在这里找到一些有用的课程,如Interval
, YearWeek
, YearQuarter
等。