【问题标题】:Extract time from date String从日期字符串中提取时间
【发布时间】:2011-03-31 02:50:36
【问题描述】:

如何格式化"2010-07-14 09:00:02" 日期字符串以仅描述"9:00"

【问题讨论】:

    标签: java string date time


    【解决方案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.
          猜你喜欢
          • 2020-08-14
          • 1970-01-01
          • 2023-01-04
          • 1970-01-01
          • 1970-01-01
          • 2023-03-18
          • 1970-01-01
          • 2019-06-06
          • 1970-01-01
          相关资源
          最近更新 更多