Java: преобразовать время с сегодняшнего дня в метку времени - PullRequest
5 голосов
/ 02 марта 2011

Я использую Java 6, и у меня есть время от текущей даты в виде строки, например: 14:21:16, и мне нужно преобразовать это в Timestamp объект для хранения вбаза данных.

Однако, похоже, нет хорошего способа получить метку времени из этого.Timestamp.valueOf(String) довольно близко, но требует даты.Есть ли хороший способ сделать объект Timestamp из такой строки?

Ответы [ 6 ]

6 голосов
/ 02 марта 2011

Лично я бы использовал Joda Time , чтобы проанализировать время до LocalTime и добавить его к сегодняшнему LocalDate, чтобы получить LocalDateTime, а затем преобразовать его в Instant используя любой часовой пояс, который вас интересует. (Или используйте LocalTime.toDateTimeToday(DateTimeZone).)

Затем просто создайте отметку времени с помощью конструктора Timestamp(long).

Существует множество других подходов (например, использование SimpleDateFormat вместо анализа с Joda Time, если вы действительно хотите ...), но в конечном итоге вам, вероятно, понадобится конструктор Timestamp(long) в конце. (Преимущество использования Joda Time здесь заключается в том, что очевидно, что представляется на каждом этапе - вы не пытаетесь рассматривать «только время» как «дату и время» или наоборот.)

5 голосов
/ 02 марта 2011

Как насчет этого:

final String str = "14:21:16";
final Timestamp timestamp =
    Timestamp.valueOf(
        new SimpleDateFormat("yyyy-MM-dd ")
        .format(new Date()) // get the current date as String
        .concat(str)        // and append the time
    );
System.out.println(timestamp);

Вывод:

2011-03-02 14: 21: 16.0

4 голосов
/ 02 марта 2011

Лучшее, что я могу придумать, используя стандартный API, не так уж и красиво:

    // Get today's date and time.
    Calendar c1 = Calendar.getInstance();
    c1.setTime(new Date()); 

    // Get the required time of day, copy year, month, day.
    Calendar c2 = Calendar.getInstance();
    c2.setTime(java.sql.Time.valueOf("14:21:16"));
    c2.set(Calendar.YEAR, c1.get(Calendar.YEAR));
    c2.set(Calendar.MONTH, c1.get(Calendar.MONTH));
    c2.set(Calendar.DAY_OF_MONTH, c1.get(Calendar.DAY_OF_MONTH));

    // Construct required java.sql.Timestamp object.
    Timestamp time = new Timestamp(c2.getTimeInMillis());

    Let's see what we've done.
    System.out.println(time);

Обратите внимание, что java.sql.Time.valueOf принимает строку вида "ЧЧ: ММ: СС", как вытребуют.Другие форматы требуют использования SimpleDateFormat.

1 голос
/ 02 марта 2011

Использовать org.apache.commons.lang.time.DateUtils:

Date today = DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH);    
DateFormat df = new SimpleDateFormat("HH:mm:ss");
Date time = df.parse("14:21:16");
Timestamp time = new Timestamp(today.getTime() + time.getTime());
0 голосов
/ 02 марта 2011
String str = "14:21:16";
DateFormat formatter = new SimpleDateFormat("HH:mm:ss"); 
Date date = formatter.parse(str); 
Timestamp timestamp = new Timestamp(date.getTime());
0 голосов
/ 02 марта 2011

Имейте определенный день (скажем, эпоху Unix?), Чтобы служить днем.Когда вы используете его, используйте только те параметры времени, которые вас интересуют, игнорируя день.

Другой вариант будет java.sql.Time

http://download.oracle.com/javase/1.4.2/docs/api/java/sql/Time.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...