Cast String Date до нового формату Java

Я намагаюся віддати формат дати, який є string resultset від бази даних до стандартного формату, але за допомогою simpledateformat видає наступну помилку:

Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Date
at java.text.DateFormat.format(Unknown Source)
at java.text.Format.format(Unknown Source)
at CopyEJ.CopyEJ.main(CopyEJ.java:113)

RROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
JDWP exit error AGENT_ERROR_NO_JNI_ENV(183):  [../../../src/share/back/util.c:838]

З De-bug я дізнався, що змінна time_stmp має значення "2013-04-19 17:29:06" Я хочу кинути на це:

yyyyMMddhhmmss

Ось код:

SimpleDateFormat df = new SimpleDateFormat("yyyyMMddhhmmss");

        ResultSet rs_dt = cmd1.executeQuery(dt);

        String time_stmp = null;

        while (rs_dt.next())
        {
            time_stmp = rs_dt.getString(1);
        }

        StringBuilder ts = new StringBuilder( df.format( time_stmp ) );

Який найкращий спосіб досягти цього?

0

7 Відповіді

Вам слід використовувати тут DateFormat.parse() , оскільки аргумент типу String . DateFormat.format() , з іншого боку, використовується для форматування Date об'єктів як String .

StringBuilder ts = new StringBuilder(df.format(df.parse(time_stmp)));

Також рекомендується зберігати дані дат/часу як TimeStamp в базі даних замість String .

1
додано
@ user2385057 Не використовуйте forString (), оскільки він використовує формат за замовчуванням Date . Використовуйте parse() , а потім format() замість вашого користувацького DateFormat . Перевірте оновлення.
додано Автор Ravi Thapliyal, джерело
@ user2385057 - не слід теж важко зрозуміти це звідти ;-)
додано Автор jahroy, джерело
це дає мені помилку "Конструктор StringBuilder (Дата) не визначено"
додано Автор user2385057, джерело

Ваш простий DateFormat має неправильний параметр datepattern. Вам доведеться проаналізувати його на сьогоднішній день за допомогою шаблону вами DB, а потім провести його синтаксичний аналіз до String . Спробуйте це таким чином:

    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

    ResultSet rs_dt = cmd1.executeQuery(dt);

    String time_stmp = null;

    while (rs_dt.next())
    {
       time_stmp = rs_dt.getString(1);
    }
    Date d = null;
    try {
       Date d = df.parse(time_stmp);
    } catch (ParseException ex) {
        Logger.getLogger(Prime.class.getName()).log(Level.SEVERE, null, ex);
    }
    SimpleDateFormat df2 = new SimpleDateFormat("yyyyMMddhhmmss");

    StringBuilder ts = new StringBuilder( df2.format(d) );

By the way:
If you want your output to be in 24h-Format, then you have to use the pattern yyyyMMddHHmmss

1
додано

Це буде працювати

    SimpleDateFormat df = new SimpleDateFormat("YYYY-MM-dd hhhh:mm:ss");
    String time_stmp ="2013-04-19 17:29:06";
    Date date=df.parse(time_stmp);
    StringBuilder ts = new StringBuilder( df.format( date ) );
    System.out.println(ts);
0
додано

Любіть це згадувати ви потребуєте використати

SimpleDateFormat.parse()

Крім того, якщо ваш рядок у формі

`2013-04-19 17:29:06`

Ви хочете побудувати свій SimpleDateFormat для читання, як це

`yyyy-MM-dd HH:mm:ss` //make sure you use uppercase H for 24 hour times
0
додано

Використовуйте SimpleDateFormat.parse() , щоб перетворити рядок в дату .

Використовуйте SimpleDateFormat.format() , щоб перетворити Дата в рядок .

Усі разом зараз:

SimpleDateFormat dbFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat stdFormat = new SimpleDateFormat("yyyyMMddhhmmss");
String s = stdFormat.format(dbFormat.parse(input));

Ви можете змінити формати відповідно до ваших потреб.

0
додано

The problem is, format of the date retrieved from DB is yyyy-dd-MM HH:mm:ss and you are trying to parse it with the format yyyyMMddhhmmss

Ви можете зробити щось подібне

    String date = "2013-04-19 17:29:06";
    Date d = new SimpleDateFormat("yyyy-dd-MM HH:mm:ss").parse(date);
    SimpleDateFormat outputFormat = new SimpleDateFormat("yyyyMMddhhmmss");
    System.out.println(outputFormat.format(d));
0
додано
Можливо, потрібно перевірити порядок дня та місяця тут :)
додано Автор Java Devil, джерело

Привіт, ви можете використовувати код нижче, щоб форматувати дату за вашим вибором (Ex: yyyy-MM-dd HH: mm: ss)

        Calendar calendar = Calendar.getInstance();
        Date calDate = calendar.getInstance().getTime();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("Calendar Date: " + calDate);
        System.out.println("Your Choice Date format (yyyy-MM-dd HH:mm:ss): "+dateFormat.format(calDate));
0
додано
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників