Как правильно отформатировать дату? - PullRequest
0 голосов
/ 20 января 2012

Функция, показанная ниже, возвращает дату, например, «Сб 8 сентября 00:00 ФТТ 2010». Но я ожидал получить дату в следующем формате «гггг-мм-дд чч: мм». Что не так в этом коде?

String date = "2010-08-25";
String time = "00:00";

Также на одном ноутбуке выход, например, для. 23:45 это 11:45. Как я могу точно определить формат 24?

private static Date date(final String date,final String time) {
       final Calendar calendar = Calendar.getInstance();
       String[] ymd = date.split("-");
       int year = Integer.parseInt(ymd[0]);
       int month = Integer.parseInt(ymd[1]);
       int day = Integer.parseInt(ymd[2]);
       String[] hm = time.split(":");
       int hour = Integer.parseInt(hm[0]);
       int minute = Integer.parseInt(hm[1]);
       calendar.set(Calendar.YEAR,year);
       calendar.set(Calendar.MONTH,month);
       calendar.set(Calendar.DAY_OF_MONTH,day);
       calendar.set(Calendar.HOUR,hour);
       calendar.set(Calendar.MINUTE,minute);
       SimpleDateFormat dateFormat =  new SimpleDateFormat("yyyy-MM-dd HH:mm");
       Date d = calendar.getTime();
       String dateString= dateFormat.format(d);
       Date result = null;
       try {
            result = (Date)dateFormat.parse(dateString);
       } catch (ParseException e) {
            e.printStackTrace();
       }
       return result;
    }

Ответы [ 4 ]

3 голосов
/ 20 января 2012

Что не так в этом коде?

Вы, похоже, ожидаете, что возвращенный объект Date узнает о формате, который вы проанализировали, - нет.Это просто мгновение во времени.Если вам нужна дата в определенном формате, вы используете SimpleDateFormat.format, это так просто.(Ну, или вы используете лучшую библиотеку, такую ​​как Joda Time .)

Думайте о значении Date как о int - int это просто число;у вас нет «int в шестнадцатеричном» или «int в десятичном» ... вы принимаете это решение, когда хотите отформатировать его.То же самое верно и для Date.

(Аналогично Date не связан с конкретным календарем, часовым поясом или языковым стандартом. Это просто мгновение во времени.)

2 голосов
/ 20 января 2012

Как вы распечатали результат возврата? Если вы просто используете System.out.println(date("2010-08-25", "00:00"), тогда вы можете получить Sat Sep 8 00:00 PDT 2010 в зависимости от текущей настройки формата даты и времени на вашем работающем компьютере. Но хорошо, что вы можете сделать, это:

Date d = date("2010-08-25", "00:00");
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm").format(d));

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

2 голосов
/ 20 января 2012

просто используйте SimpleDateFormat класс

См

0 голосов
/ 20 января 2012

Я удивлен, что вы получаете разные выходные данные на разных компьютерах. Теоретически шаблон SimpleDateFormat "H" должен выводить дату в 24-часовом формате. Вы получаете 11:45 вечера или 11:45 утра?

Хотя это не должно влиять на результат, SimpleDateFormat и Calendar зависят от локали, поэтому вы можете попытаться указать точную локаль, которую вы хотите использовать (Locale.US), и посмотреть, будет ли это иметь какое-либо значение.

В качестве окончательного предложения, если хотите, вы также можете попробовать использовать библиотеку Joda-Time ( DateTime ), чтобы вместо этого выполнять манипуляции с датой. Это значительно облегчает работу с объектами даты.

    DateTime date = new DateTime( 1991, 10, 13, 23, 39, 0);
    String dateString = new SimpleDateFormat("yyyy-MM-dd HH:mm").format( date.toDate());
    DateTime newDate = DateTime.parse( dateString, DateTimeFormat.forPattern("yyyy-MM-dd HH:mm"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...