52

How can I format the "2010-07-14 09:00:02" date string to depict just "9:00"?

7 Answers 7

118

Use DateTimeFormatter to convert between a date string and a real LocalDateTime object. with a LocalDateTime as starting point, you can easily apply formatting based on various patterns as definied in the javadoc of the DateTimeFormatter.

String originalString = "2010-07-14 09:00:02"; LocalDateTime dateTime = LocalDateTime.parse(originalString, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); String newString = DateTimeFormatter.ofPattern("H:mm").format(dateTime); // 9:00 

In case you're not on Java 8 or newer yet, use SimpleDateFormat to convert between a date string and a real Date object. with a Date as starting point, you can easily apply formatting based on various patterns as definied in the javadoc of the SimpleDateFormat.

String originalString = "2010-07-14 09:00:02"; Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(originalString); String newString = new SimpleDateFormat("H:mm").format(date); // 9:00 
Sign up to request clarification or add additional context in comments.

6 Comments

hi is it also possible to format it in hours:min if I have a unixtimestamp like: 1279080000 ?? I tried what was suggested in previous posts but did not help. Thank you
You can construct a new Date object with timestamp in milliseconds and then just format it. If you're actually retrieving it from DB, you should use ResultSet#getTimestamp() to get a Date as answered in one of your previous questions. Or even better, make use of the SQL builtin date/time functions to return the timestamp already in the desired format so that there's no need for the expensive task of remassaging the data of every row afterwards in Java. In that case, just get the hour by ResultSet#getString(). Use the right tool for the job
i am getting it from the database. but needed to generate a print report. so thought i could iterate on the values and change them on the fly. as i need to just print it out in the end. unable to get it done in any starightforward way :(
@BalusC Is there a way to display it in the user's phone format, ie, am/pm or 24 hr depending on the phone preferences, without having to set a default like "H:mm"?
And how to get AM/PM?
|
14
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2010-07-14 09:00:02"); String time = new SimpleDateFormat("H:mm").format(date); 

http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html

Comments

13

A very simple way is to use Formatter (see date time conversions) or more directly String.format as in

String.format("%tR", new Date()) 

Comments

5

The other answers were good answers when the question was asked. Time moves on, Date and SimpleDateFormat get replaced by newer and better classes and go out of use. In 2017, use the classes in the java.time package:

 String timeString = LocalDateTime.parse(dateString, DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss")) .format(DateTimeFormatter.ofPattern("H:mm")); 

The result is the desired, 9:00.

Comments

4

I'm assuming your first string is an actual Date object, please correct me if I'm wrong. If so, use the SimpleDateFormat object: http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html. The format string "h:mm" should take care of it.

3 Comments

Wouldn't H:mm be a more sane choice?
Even if the String is not a Date object initially, you can use SimpleDateFormat.parse() to turn it into one, as per BalusC's example.
Indeed, without AM/PM marker (a), you'd rather prefer H above h to avoid ambiguity between 9:00 (AM) and 9:00 (PM).
3

If you have date in integers, you could use like here:

Date date = new Date(); date.setYear(2010); date.setMonth(07); date.setDate(14) date.setHours(9); date.setMinutes(0); date.setSeconds(0); String time = new SimpleDateFormat("HH:mm:ss").format(date); 

3 Comments

Please explain your answer to make it clearer for other readers.
You may use 07 for August if for some reason you fancy that, but be aware that 08 or 09 won’t work for September or October. The 0 prefix means the number is octal.
Also note that if you intended to hit the date in the question, 2010-07-14, you missed. Date months are 0-based, so you got August, not July. You may argue that since you are outputting the time only, it’s not important, but it’s sure to confuse some. Further be aware that the setXx methods have been deprecated since Java 1.1 because they are unreliable across time zones.
0
let datestring = "2017-02-14 02:16:28" let formatter = DateFormatter() formatter.dateStyle = DateFormatter.Style.full formatter.timeStyle = DateFormatter.Style.full formatter.dateFormat = "yyyy-MM-dd hh:mm:ss" let date = formatter.date(from: datestring) let date2 = formatter.String(from: date) 

1 Comment

for the swift 3.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.