Как преобразовать Строку в использование Даты 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

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

62
задан 13 September 2015 в 08:06

10 ответов

Попробуйте это:

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

, Это - все в javadoc для SimpleDateFormat


к вашему сведению, причина, Ваш формат является все еще правильным форматом даты, состоит в том что:

  • 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

Вуаля!

91
ответ дан 31 October 2019 в 13:24

m - минута 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 
45
ответ дан 31 October 2019 в 13:24

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

/**
     * 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();
    }
11
ответ дан 31 October 2019 в 13:24
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()));
7
ответ дан 31 October 2019 в 13:24

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

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());
            }
4
ответ дан 31 October 2019 в 13:24

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

    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();
    }
4
ответ дан 31 October 2019 в 13:24

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

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);
3
ответ дан 31 October 2019 в 13:24
    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MM/dd/uuuu");
    System.out.println(LocalDate.parse("08/16/2011", dateFormatter));

Вывод:

16.08.2011

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

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

, Когда я анализирую 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, сказанный I’m) современный API прибывает встроенный.
  • В Java 6 и 7 получают Бэкпорт ThreeTen, бэкпорт новых классов (ThreeTen для JSR 310; см. ссылки внизу).
  • На (более старом) Android используют выпуск Android Бэкпорта ThreeTen. It’s по имени ThreeTenABP. И удостоверьтесь, что Вы импортируете классы даты и времени от [1 111] с подпакетами.

Ссылки

2
ответ дан 31 October 2019 в 13:24
String localFormat = android.text.format.DateFormat.getBestDateTimePattern(Locale.getDefault(), "EEEE MMMM d");
return new SimpleDateFormat(localFormat, Locale.getDefault()).format(localMidnight);

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

1
ответ дан 31 October 2019 в 13:24

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

мм обозначает минуты , используйте MM, как это для [1 111] Месяцы

, 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
1
ответ дан 31 October 2019 в 13:24

Другие вопросы по тегам:

Похожие вопросы: