Разбор строки времени с SimpleDateFormat - PullRequest
0 голосов
/ 30 сентября 2011

У меня проблема с анализом только строки времени из моей базы данных

private static final String TIME_FORMAT = "HH:mm:ss";
public static final SimpleDateFormat timeFormat = new SimpleDateFormat(TIME_FORMAT, Locale.getDefault());

И после вывода:

String time = "17:17:57";
Date myParsedDate = timeFormat.parse(time); //forget the exception thing
//output of myParsedDate.toString = "Thu Jan 01 16:47:57 GMT+08:00 1970"

Кажется, что есть проблема с локалью или чем-то ... просто строкой .. Почему это так? я просто хочу, чтобы у даты было время, необходимое для выбора времени .. гы ..

Редактировать Поскольку я использую статический формат времени, я решил использовать мой маленький вспомогательный метод

public static Date getTimeFromTimeString(String timeString)
{
    String[] splitStrings = timeString.split(":");

    Date timeDate = new Date();
    timeDate.setHours(Integer.parseInt(splitStrings[0]));
    timeDate.setMinutes(Integer.parseInt(splitStrings[1]));
    timeDate.setSeconds(Integer.parseInt(splitStrings[2]));

    return timeDate;
}

Спасибо за помощь, Джон Скит .. Я полагаю, что это смещение TimeZone вызывает это .. .. плохо придерживаться моего маленького метода ..

Ответы [ 2 ]

3 голосов
/ 30 сентября 2011

Проблема в том, что вы распечатываете результат Date.toString() - который всегда показывает результаты в часовом поясе system .Это, вероятно, не , что вы хотите.

Сам Date имеет нет концепцию часового пояса - это всего лишь мгновение во времени.

Я бы посоветовал вам использовать Joda Time , если это вообще возможно.Это LocalTime, которое на самом деле представляет то, что вы здесь анализируете.

РЕДАКТИРОВАТЬ: Просто чтобы повторить то, что в комментарии ... Я подозреваю, что часовой пояс в вашем DateFormat не совпадает счасовой пояс, используемый Date.toString.Для простоты, вероятно, стоит установить часовой пояс DateFormat в UTC, а затем, если вы хотите преобразовать в Calendar, вы должны установить этот часовой пояс в UTC, прежде чем вызывать setTime(date).

2 голосов
/ 30 сентября 2011

Просто сделайте это:

 Calendar c = Calendar.getInstance();
 c.setTime(myParsedDate);

 int hours = c.get(Calendar.HOUR);
 int mins = c.get(Calendar.MINUTE);
 int seconds = c.get(Calendar.SECOND);
...