0

我无法将日期格式更改为dd/MMM/yyyy.

这是我当前的实现:

final String OLD_FORMAT = "yyyy-MM-dd";

final String NEW_FORMAT = "yyyy-MMM-dd";

//Start Date
String str4=label.getText();
java.util.Date toDate = null;

//System.out.println(str4);

//End Date
String str5=lblNewLabel_3.getText();
java.util.Date newDateString = null;

SimpleDateFormat format = new SimpleDateFormat(OLD_FORMAT);

try {

    toDate=format.parse(str4);

} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

try {
    newDateString=format.parse(str5);
    format.applyLocalizedPattern(NEW_FORMAT);


} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();

}

输出:[2013 年 5 月 28 日星期二 00:00:00 WST]

有人可以帮我解决这个问题吗,谢谢!:D

我添加了这个while语句,然后日期格式再次设置为默认值..

System.out.println("From " + toDate);

System.out.println("To " + newDateString );

Calendar cal2 = Calendar.getInstance();

cal2.setTime(toDate);

System.out.println(toDate);

while (cal2.getTime().before(newDateString)) {
    cal2.add(Calendar.DATE, 1);
    Object datelist=(cal2.getTime());
    List<Object> wordList = Arrays.asList(datelist);  
    System.out.println(wordList);
}
4

6 回答 6

1

java.util.Date没有格式。它只是自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数

当您执行时,System.out.println(new Date())它只是提供Date对象默认toString方法输出。

您需要使用 aDateFormat来实际格式化Date为 aString

public class TestDate01 {

    public static final String OLD_FORMAT = "yyyy-MM-dd";
    public static final String NEW_FORMAT = "yyyy-MMM-dd";

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            String oldValue = "2013-05-29";
            Date date = new SimpleDateFormat(OLD_FORMAT).parse(oldValue);
            String newValue = new SimpleDateFormat(NEW_FORMAT).format(date);
            System.out.println("oldValue = " + oldValue + "; date = " + date + "; newValue = " + newValue);
        } catch (ParseException exp) {
            exp.printStackTrace();
        }
    }
}

哪个输出...

oldValue = 2013-05-29; date = Wed May 29 00:00:00 EST 2013; newValue = 2013-May-29

扩展以满足变化的需求

你正在犯同样的错误。 Date是自纪元以来毫秒数的容器,它没有任何自己的格式,而是使用自己的格式。

try {
    Date toDate = new Date();
    String newDateString = "2013-05-31";

    System.out.println("From " + toDate);
    System.out.println("To " + newDateString);

    Date endDate = new SimpleDateFormat(OLD_FORMAT).parse(newDateString);

    System.out.println("endDate " + endDate);

    Calendar cal2 = Calendar.getInstance();
    cal2.setTime(toDate);
    System.out.println(toDate);

    SimpleDateFormat newFormat = new SimpleDateFormat(NEW_FORMAT);

    while (cal2.getTime().before(endDate)) {
        cal2.add(Calendar.DATE, 1);
        Date date = (cal2.getTime());
        System.out.println(date + "/" + newFormat.format(date));
    }
} catch (Exception exp) {
    exp.printStackTrace();
}

哪个输出...

From Wed May 29 15:56:48 EST 2013
To 2013-05-31
endDate Fri May 31 00:00:00 EST 2013
Wed May 29 15:56:48 EST 2013
Thu May 30 15:56:48 EST 2013/2013-May-30
Fri May 31 15:56:48 EST 2013/2013-May-31

while没有道理。

Object datelist=(cal2.getTime());
List<Object> wordList = Arrays.asList(datelist);

cal2.getTime()返回 a Date,然后您尝试从中创建一个列表...也许我错过了一些东西...

于 2013-05-29T05:08:33.697 回答
0
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");  
String str4=label.getText();
    Date date=null;
    try {
        date = formatter.parse(str4);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }  
    formatter = new SimpleDateFormat("dd/MMM/yyyy"); 

    System.out.println("Date :" +formatter.format(date));  
于 2013-05-29T05:01:56.293 回答
0

检查下面的代码片段

 try {
            SimpleDateFormat sdin = new SimpleDateFormat("yyyy-MM-dd");
            SimpleDateFormat sdout = new SimpleDateFormat("yyyy-MMM-dd");
            Date date = sdin.parse("2013-05-31");
            System.out.println(sdout.format(date));
        } catch (ParseException ex) {
            Logger.getLogger(TestDate.class.getName()).log(Level.SEVERE, null, ex);
        }
于 2013-05-29T05:07:43.133 回答
0

我编写了一个静态实用程序方法,您可以直接使用它......希望它足够清楚地演示 SimpleDateFormat parse() 和 format() 方法的正确使用:

  /**
   * Returns a reformatted version of the input date string, where the format 
   * of the input date string is specified by dateStringFormat and the format 
   * of the output date string is specified by outputFormat.  Format strings 
   * use SimpleDateFormat format string conventions.
   *
   * @param dateString input date string
   * @param dateStringFormat format of the input date string (e.g., dd/MM/yyyy)
   * @param outputFormat format of the output date string (e.g., MMM dd, yyyy)
   *
   * @return reformatted date string
   *
   * @throws ParseException if an error occurs while parsing the input date 
   *                        string using the provided format
   *
   * @author Steve
   */
  public static final String reformatDateString(final String dateString,
                                                final String dateStringFormat,
                                                final String outputFormat) 
                                                throws ParseException {

     final SimpleDateFormat dateStringParser = new SimpleDateFormat(dateStringFormat);
     final SimpleDateFormat outputFormatter = new SimpleDateFormat(outputFormat);

     return outputFormatter.format(dateStringParser.parse(dateString));
  }

你这样称呼它:

   System.out.println(reformatDateString("2013-5-28", "yyyy-MM-dd", "dd/MMM/yyyy"));

在此示例中,将输出以下内容:

   28/May/2013

基本思想是您通常将 SimpleDateFormat 实例用于以下两件事之一:

  1. 将包含具有已知格式的日期的字符串转换为 java.util.Date 实例...使用 parse() 方法,或
  2. 将 java.util.Date 实例转换为指定格式的字符串...使用 format() 方法。

我在使用我在该方法中创建的两个不同 SimpleDateFormat 实例编写的方法中在一行中执行这两个操作 - 一个使用输入格式创建(用于将原始 String 解析为 Date 实例)......另一个使用创建输出格式(用于将创建的日期转换回具有所需格式的字符串)。

于 2013-05-29T05:08:49.320 回答
0

如果你想以某种格式显示日期,你应该使用格式函数并使用字符串输出来显示,而不是日期对象

例如考虑这段代码:

String pattern = "dd/MM/yyyy";
DateFormat df = new SimpleDateFormat(pattern);
Date d = new Date();
try {
   String outputString = df.format(d);
   System.out.println("outputString :"+outputString);
} catch (ParseException e) {
   e.printStackTrace();
}

parse 函数只是从特定格式解析字符串以创建日期对象,但它不会更改任何日期对象的显示属性。

于 2013-05-29T05:11:39.447 回答
0
System.out.println(format.format(toDate))

这将以所需格式显示日期。

于 2013-05-29T05:18:33.370 回答