неожиданный вывод при преобразовании строки в дату в Java - PullRequest
2 голосов
/ 10 февраля 2012

У меня есть строка "12/9/2010 4:39:38 PM", которую я должен преобразовать в объект даты. Я использую следующий код для этого:

String str = "12/9/2010 4:39:38 PM";

DateFormat formatter ;

Date date ;

formatter = new SimpleDateFormat("M/dd/yyyy H:m:s a");

date =(Date)formatter.parse(str);             

System.out.println("date printed"+date);      

Однако, когда я печатаю вывод, я вижу

Четверг, 09 04:39:38 IST 2010

Как мне получить дату точно так, как я объявил в строке, т.е. 1011 *

12.09.2010 16:39:38

как вывод? Просьба помочь

Ответы [ 8 ]

5 голосов
/ 10 февраля 2012

Вы предполагаете, что само значение Date запоминает формат, но не запоминает. Date.toString будет делать то, что хочет - потому что Date представляет только мгновение во времени.

Если вы хотите отформатировать a Date, снова используйте ваш форматтер:

System.out.println(formatter.format(date));

Тем не менее, не обязательно не вернет точно такое же значение, которое было в вашей строке, так как может быть несколько значений, которые анализируются одинаково. Например, поскольку вы использовали только «H: m: s», я ожидаю, что «4: 5: 6» будет проанализирован так же, как и «04:05:06».

2 голосов
/ 10 февраля 2012

Вы можете полностью указать формат вывода даты, используя класс Formatter

Краткий ответ

String str = "12/9/2010 4:39:38 PM";
Formatter formatter = new SimpleDateFormat("M/dd/yyyy H:m:s a");
Date date =(Date)formatter.parse(str);
Formatter formatterOutput = new SimpleDateFormat("MM/dd/yyyy HH:m:ss a");
String s = formatterOutput.format(date);

Другие примеры

Format formatter;

// The year
formatter = new SimpleDateFormat("yy");    // 02
formatter = new SimpleDateFormat("yyyy");  // 2002

// The month
formatter = new SimpleDateFormat("M");     // 1
formatter = new SimpleDateFormat("MM");    // 01
formatter = new SimpleDateFormat("MMM");   // Jan
formatter = new SimpleDateFormat("MMMM");  // January

// The day
formatter = new SimpleDateFormat("d");     // 9
formatter = new SimpleDateFormat("dd");    // 09

// The day in week
formatter = new SimpleDateFormat("E");     // Wed
formatter = new SimpleDateFormat("EEEE");  // Wednesday

// Get today's date
Date date = new Date();

// Some examples
formatter = new SimpleDateFormat("MM/dd/yy");
String s = formatter.format(date);
// 01/09/02

formatter = new SimpleDateFormat("dd-MMM-yy");
s = formatter.format(date);
// 29-Jan-02

// Examples with date and time; see also
// Formatting the Time Using a Custom Format
formatter = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss");
s = formatter.format(date);
// 2002.01.29.08.36.33

formatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z");
s = formatter.format(date);
// Tue, 09 Jan 2002 22:14:02 -0500

из: http://www.exampledepot.com/egs/java.text/formatdate.html

1 голос
/ 10 февраля 2012

Использовать тот же форматер:

System.out.println("date printed "+ formatter.format(date));
0 голосов
/ 18 июня 2013
public static void main(String args[])
{
        String string="2012-09-13"; 
        Date str=processFileDate(string);
        System.out.println(str);
}
public static Date processFileDate(String str)
{ //returns the date or "null" if doesn't exist

    String[] strformat={
            "EEE,dd MMM yyyy","MMM dd, yyyy, hh.mmaa zzz",
            "EEEE, MMMMM dd  yyyy 'at' hh:mm",
            "EEEE, MMMMM dd, yyyy, hh:mm",
            "EEE MMM dd yyyy, hh:mm ",
            "dd MMMMM yyyy'Last updated at' hh:mm zzz",
            "MMM dd, yyyy 'at' hh:mmaa",
            "MMM dd, yyyy 'at'  hh:mmaa zzz",
            "MMMMM dd, yyyy, hh:mm aa zzz",
            "EEE, MMM dd, yyyy hh:mm ",
            "MMMMM dd, yyyy hh:mm zzz",
            "MMMM dd, yyyy hh:mm aa",
            "MMMM dd, yyyy hh:mmaa",
            "MMMM dd, yyyy hh:mm",
            "dd MMMM yyyy hh:mm:ss",
            "dd MMMM yyyy hh:mm",
            "MMMM dd, yyyy",
            "dd MMMM yyyy ",
            "dd MM yy",
            "yyyy MMMM dd",
            "dd'st' MMMM,yyyy",
            "dd'nd' MMMM,yyyy",
            "dd'rd' MMMM,yyyy",
            "MMMM dd,yyyy",
            "MMM dd yy",
            "mm dd yy",
            "yyyy-MM-dd",
            "yyyy-MM-dd HH:mm:ss",
            "E MMM dd hh:mm:ss Z yyyy",
            "EEE, dd MMM yyyy HH:mm:ss Z"

    };

    String temp="null";
    for(int i=0;i<str.length();i++){
        temp=str.substring(i, str.length());
        for(int l=0;l<strformat.length;){
            Date strp=checkformat(temp,strformat[l]);
            if(strp!=null)
            {
                return strp;
            }
            else l++;
        }
     }
    return null;
}

private static Date checkformat(String str, String sdf) {
     SimpleDateFormat sdformat=new SimpleDateFormat(sdf);

       try{
        Date d=sdformat.parse(str);
        return d;
       }catch(Exception e){}

       return null;
}
0 голосов
/ 10 февраля 2012

Не уверен, что вы пытаетесь достичь.Но вам нужно вызвать SimpleDateFormat.format (), чтобы получить то, что вы ожидаете.Печать даты напрямую получит только реализация toString () Date

0 голосов
/ 10 февраля 2012

Java.util.Date не имеет понятия внутреннего формата - вам нужно использовать метод format(java.util.Date d), чтобы увидеть отформатированное String представление вашего Date объекта.

String str = "12/9/2010 4:39:38 PM";

DateFormat formatter = new SimpleDateFormat("M/dd/yyyy H:m:s a");
Date date =(Date)formatter.parse(str);

System.out.println("date printed"+formatter.format(date));
0 голосов
/ 10 февраля 2012
formatter = new SimpleDateFormat("MM/dd/yyyy HH:m:ss a");
String temp =formatter.format(date ); 
0 голосов
/ 10 февраля 2012

Преобразование его обратно в строку с использованием SimpleDateFormat?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...