2

我希望将我的日期格式更改为 MM/DD/YYYY,目前它在 YYYY/MM/DD 中​​。

我尝试研究它,但具有讽刺意味的是,它总是相反。现在有人可能会说向后尝试尝试从那里开始工作,但它没有用。

我的类调用所有的东西:

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 

顺便说一句,我不熟悉的简单日期格式类和日期格式类,并没有成功地尝试实现它们。

4

2 回答 2

7

只需使用SimpleDateFormat转换StringDate. 无需为痛苦的CalendarAPI 烦恼。

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);
于 2012-06-05T16:56:13.407 回答
0

tl;博士

String output = LocalDate.parse( "2012/06/05".replace( "/" , "-" ) ).format( DateTimeFormatter.ofLocalizedDate( FormatStyle.SHORT ).withLocale( Locale.US ) ) ;

细节

BalusC的答案是正确的,但现在已经过时了。

旧的日期时间类,例如DateCalendar现在是遗留的。请改用 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();

要生成其他格式的字符串,请使用DateTimeFormatter. 通常最好通过指定一个Locale. 确定 (a) 翻译的Locale人类语言,(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.time 功能在 ThreeTen-Backport 中向后移植到 Java 6 和 7,并在ThreeTenABP进一步适应Android

ThreeTen -Extra项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuarter等。

于 2016-08-16T22:26:46.247 回答