How can I format the "2010-07-14 09:00:02" date string to depict just "9:00"?
7 Answers
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 6 Comments
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 jobDate 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
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
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
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
H:mm be a more sane choice?Date object initially, you can use SimpleDateFormat.parse() to turn it into one, as per BalusC's example.a), you'd rather prefer H above h to avoid ambiguity between 9:00 (AM) and 9:00 (PM).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
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.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)