从日期字符串中提取时间

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】:

当问题被问到时,其他答案都是很好的答案。随着时间的推移,DateSimpleDateFormat 被更新更好的类所取代,并且不再使用。 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.

以上是关于从日期字符串中提取时间的主要内容,如果未能解决你的问题,请参考以下文章

从字符串转换日期和/或时间并从日期中提取季度/年时转换失败

如何从日期字符串中提取年份?

如何从java中的字符串时间戳中提取日期和时间

使用Javascript从字符串中提取日期和时间

从字符串中提取日期的世纪

从字符串中提取数字作为R中的数字或日期