Подтвердить что ты не робот

Как преобразовать String в Date с помощью SimpleDateFormat?

У меня есть этот фрагмент кода:

DateFormat formatter1;
formatter1 = new SimpleDateFormat("mm/DD/yyyy");
System.out.println((Date)formatter1.parse("08/16/2011"));

Когда я запускаю это, я получаю это как вывод:

Sun Jan 16 00:10:00 IST 2011

Я ожидал:

Tue Aug 16 "Whatever Time" IST 2011

Я хочу сказать, что месяц не ожидаю. Какая ошибка?

4b9b3361

Ответ 1

Попробуйте следующее:

new SimpleDateFormat("MM/dd/yyyy")
  • MM - "месяц" (не MM)
  • dd - "день" (не dd)

Все это в javadoc для SimpleDateFormat


FYI, причина, по которой ваш формат по-прежнему является допустимым форматом даты, заключается в следующем:

  • MM - "минуты"
  • dd - "день в году"

Кроме того, вам не нужен приведение в Date... он уже является Date (или он взрывается):

public static void main(String[] args) throws ParseException {
    System.out.println(new SimpleDateFormat("MM/dd/yyyy").parse("08/16/2011"));
}

Вывод:

Tue Aug 16 00:00:00 EST 2011

Voila!

Ответ 2

m - min M - Месяцы

Letter  Date or Time Component  Presentation    Examples
G       Era designator          Text                AD
y       Year                    Year                1996; 96
M       Month in year           Month               July; Jul; 07
w       Week in year            Number              27
W       Week in month           Number              2
D       Day in year             Number              189
d       Day in month            Number              10
F       Day of week in month    Number              2
E       Day in week             Text                Tuesday; Tue
a       Am/pm marker            Text                PM
H       Hour in day (0-23)      Number              0
k       Hour in day (1-24)      Number              24
K       Hour in am/pm (0-11)    Number              0
h       Hour in am/pm (1-12)    Number              12
m       Minute in hour          Number              30
s       Second in minute        Number              55
S       Millisecond             Number              978
z       Time zone               General time zone   Pacific Standard Time; PST; GMT-08:00
Z       Time zone               RFC 822 time zone   -0800 

Ответ 3

Используйте следующую функцию

/**
     * Format a time from a given format to given target format
     * 
     * @param inputFormat
     * @param inputTimeStamp
     * @param outputFormat
     * @return
     * @throws ParseException
     */
    private static String TimeStampConverter(final String inputFormat,
            String inputTimeStamp, final String outputFormat)
            throws ParseException {
        return new SimpleDateFormat(outputFormat).format(new SimpleDateFormat(
                inputFormat).parse(inputTimeStamp));
    }

Пример использования:

    try {
        String inputTimeStamp = "08/16/2011";

        final String inputFormat = "MM/dd/yyyy";
        final String outputFormat = "EEE MMM dd HH:mm:ss z yyyy";

        System.out.println(TimeStampConverter(inputFormat, inputTimeStamp,
                outputFormat));

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

Ответ 4

String newstr = "08/16/2011";
SimpleDateFormat format1 = new SimpleDateFormat("MM/dd/yyyy");
SimpleDateFormat format = new SimpleDateFormat("EE MMM dd hh:mm:ss z yyyy");
Calendar c = Calendar.getInstance();
c.setTime(format1.parse(newstr));
System.out.println(format.format(c.getTime()));

Ответ 5

Очень простой пример.

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy");
                Date date = new Date();
                Date date1 = new Date();
            try {
                System.out.println("Date1:   "+date1);
                System.out.println("date" + date);

                date = simpleDateFormat.parse("01-01-2013");
                date1 = simpleDateFormat.parse("06-15-2013");

                System.out.println("Date1 is:"+date1);
                System.out.println("date" + date);

            } catch (Exception e) {
                System.out.println(e.getMessage());
            }

Ответ 6

Использование

SimpleDateFormat format1 = new SimpleDateFormat("MM/dd/yyyy");

Вместо <

SimpleDateFormat format1 = new SimpleDateFormat("MM/dd/yyyy");

Поскольку,

mm - is the key to minutes

DD - is the key to day in Year

Ответ 7

вы можете решить проблему очень просто, как Сначала преобразовать данную строку в объект даты  например:

java.util.Date date1 = new Date("11/19/2015"); 
SimpleDateFormat formatter = new SimpleDateFormat("MMM dd yyyy HH:mma");
String format = formatter.format(date);
System.out.println(format);

Ответ 8

Эта часть кода помогает конвертировать назад и вперед

    System.out.println("Date: "+ String.valueOf(new Date()));
    SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String stringdate = dt.format(new Date());
    System.out.println("String.valueOf(date): "+stringdate);

    try {
    Date date = dt.parse(stringdate);
    System.out.println("parse date: "+ String.valueOf(date));
    } catch (ParseException e) {
    e.printStackTrace();
    }

Ответ 9

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MM/dd/uuuu");
    System.out.println(LocalDate.parse("08/16/2011", dateFormatter));

Вывод:

2011-08-16

Я вношу свой вклад в современный ответ. Ответ по-чешски верен и был хорошим ответом, когда он был написан 6 лет назад. Теперь печально известный SimpleDateFormat класс SimpleDateFormat давно устарел, и мы намного лучше в java.time, современном API дат и времени Java. Я настоятельно рекомендую вам использовать это вместо старых классов времени.

Что пошло не так в коде?

Когда я разбираю 08/16/2011 используя ваш фрагмент, я получаю Sun Jan 16 00:08:00 CET 2011. Так как нижний регистр mm находится в течение нескольких минут, я получаю 00:08:00 (8 минут до полуночи), а поскольку прописная буква DD для дня года, я получаю 16 января.

В java.time тоже строки шаблона форматирования чувствительны к регистру, и нам нужно использовать заглавные MM для месяца и нижнего регистра dd для дня месяца.

Вопрос: Можно ли использовать java.time с моей версией Java?

Да, java.time отлично работает на Java 6 и более поздних версиях и на старых и более новых устройствах Android.

  • В Java 8 и более поздних версиях и на новых устройствах Android (от уровня API 26, как я сказал), современный API встроен.
  • В Java 6 и 7 получите ThreeTen Backport, backport новых классов (ThreeTen для JSR 310, см. Ссылки внизу).
  • На (старше) Android используется версия Android ThreeTen Backport. Его называют ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из org.threeten.bp с субпакетами.

связи

Ответ 10

String localFormat = android.text.format.DateFormat.getBestDateTimePattern(Locale.getDefault(), "EEEE MMMM d");
return new SimpleDateFormat(localFormat, Locale.getDefault()).format(localMidnight);

вернет формат, основанный на языке устройства. Обратите внимание, что getBestDateTimePattern() возвращает "наилучшую возможную локализованную форму данного скелета для данной локали"

Ответ 11

Вы использовали некоторые ошибки типа. Если вы хотите установить 08/16/2011 в следующий шаблон. Это неправильно, потому что,

мм означает минуты, используйте MM, как и для месяцев

DD ошибочен, он должен быть dd, который представляет Дни

Попробуйте это, чтобы достичь результата, который вы хотите получить (Tue Aug 16 "Whatever Time" IST 2011),

    String date = "08/16/2011"; //input date as String

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy"); // date pattern

    Date myDate = simpleDateFormat.parse(date); // returns date object 

    System.out.println(myDate); //outputs: Tue Aug 16 00:00:00 IST 2011