从日期字符串中提取时间
Posted
技术标签:
【中文标题】从日期字符串中提取时间【英文标题】:Extract time from date String 【发布时间】:2011-03-31 02:50:36 【问题描述】:如何格式化"2010-07-14 09:00:02"
日期字符串以仅描述"9:00"
?
【问题讨论】:
【参考方案1】:使用SimpleDateFormat
在日期字符串和真正的Date
对象之间进行转换。以Date
为起点,您可以轻松应用基于SimpleDateFormat
的javadoc 中定义的各种模式的格式(单击Javadoc 的蓝色代码链接)。
这是一个启动示例:
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
【讨论】:
嗨,如果我有一个像 1279080000 这样的 unixtimestamp,是否也可以在小时:分钟内格式化它?我尝试了以前帖子中的建议,但没有帮助。谢谢 您可以构造一个新的Date
对象,其时间戳以毫秒为单位,然后对其进行格式化。如果您实际上是从 DB 中检索它,您应该使用ResultSet#getTimestamp()
来获得Date
,正如one of your previous questions 中所回答的那样。或者更好的是,利用 SQL 内置的日期/时间函数以所需格式返回时间戳,这样就不需要在 Java 中重新组合每一行数据的昂贵任务。在这种情况下,只需通过ResultSet#getString()
获取小时。为工作使用正确的工具
我正在从数据库中获取它。但需要生成打印报告。所以我想我可以迭代这些值并即时更改它们。因为我需要最后打印出来。无法以任何直接的方式完成它:(
@BalusC 有没有办法以用户的电话格式显示它,即上午/下午或 24 小时,具体取决于电话首选项,而不必设置像“H:mm”这样的默认值?
以及如何获得AM/PM?【参考方案2】:
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
【讨论】:
【参考方案3】:一个非常简单的方法是使用Formatter
(见date time conversions)或更直接的String.format
,如
String.format("%tR", new Date())
【讨论】:
【参考方案4】:我假设你的第一个字符串是一个实际的 Date 对象,如果我错了,请纠正我。如果是这样,请使用 SimpleDateFormat 对象:http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html。格式字符串 "h:mm" 应该处理它。
【讨论】:
H:mm
不是更明智的选择吗?
即使字符串最初不是 Date
对象,您也可以使用SimpleDateFormat.parse()
将其变成一个,如BalusC 的示例所示。
确实,没有 AM/PM 标记 (a
),您宁愿选择 H
而不是 h
以避免在 9:00 (AM) 和 9:00 (PM) 之间产生歧义.【参考方案5】:
当问题被问到时,其他答案都是很好的答案。随着时间的推移,Date
和 SimpleDateFormat
被更新更好的类所取代,并且不再使用。 2017年,使用java.time
包中的类:
String timeString = LocalDateTime.parse(dateString, DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss"))
.format(DateTimeFormatter.ofPattern("H:mm"));
结果是我们想要的,9:00
。
【讨论】:
【参考方案6】:如果你有整数日期,你可以在这里使用:
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);
【讨论】:
请解释您的答案,以便其他读者更清楚。 如果出于某种原因,您可以在 8 月使用 07,但请注意,08 或 09 不适用于 9 月或 10 月。前缀 0 表示数字是八进制。 另请注意,如果您打算点击问题中的日期2010-07-14
,则您错过了。 Date
月份是从 0 开始的,所以你得到的是八月,而不是七月。您可能会争辩说,由于您只是输出时间,所以它并不重要,但它肯定会混淆一些人。进一步注意,setXx
方法自 Java 1.1 以来已被弃用,因为它们在时区之间不可靠。【参考方案7】:
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)
【讨论】:
对于 swift 3.以上是关于从日期字符串中提取时间的主要内容,如果未能解决你的问题,请参考以下文章