【问题标题】:How do I format a java.sql.Timestamp as (hh:mm AM/PM)如何将 java.sql.Timestamp 格式化为 (hh:mm AM/PM)
【发布时间】:2011-07-16 19:38:02
【问题描述】:

我有一个 java.sql.Timestamp,我想截断日期并以 12 小时的方式显示,例如(18:42 为下午 6:42)

我试过了:

public static String formatTimestampAsTwelveHour(java.sql.Timestamp stamp){

        String stampString = stamp.toString();
        String hms  = stampString.split(" ")[1];
        String[] hmsArray = hms.split(":");
        int hours = Integer.parseInt(hmsArray[0]);
        int minutes = Integer.parseInt(hmsArray[1]);
        int seconds = Integer.parseInt(hmsArray[2]);//just in case someone wants seconds

        String suffix = "";
        if (hours > 12){
            hours = hours -12;
            suffix = "PM";
        }else if (hours == 12){
            suffix = "PM";
        }else{
            suffix = "AM";
        }
        String lessThanTen = "";
        if (minutes<10){
            lessThanTen = "0";
        }
        return String.format("%i:%s%i %s", hours, lessThanTen,minutes, suffix);

}

我得到(线程“Thread-14”java.lang.NumberFormatException 中的异常:对于输入字符串:“06.0”)但我从不给它一个十进制数。

【问题讨论】:

    标签: java parsing time timestamp clock


    【解决方案1】:

    你不需要自己解析,你可以使用SimpleDateFormat"h:mm a",因为它是java.util.Date的子类

    【讨论】:

      【解决方案2】:

      SimpleDateFormat 做你想做的事。

      DateFormat format = new SimpleDateFormat( "h:mm a" );
      String str = format.format( timestamp );
      

      编辑:其他人以“K”格式发布的版本将返回 0-11 之间的小时数。这将返回 1-12,这更有可能是您想要的。

      【讨论】:

        【解决方案3】:
        public static String formatTimestampAsTwelveHour(java.sql.Timestamp stamp){
        
                java.util.Date date = new Date(stamp.getTime());
                SimpleDateFormat format = new SimpleDateFormat("your format here");
                return format.format(date);
        
        }
        

        Java 已经提供了日期格式化例程,而且与您独立编写的任何程序相比,它们可能是一个更好、更快的实现。

        此外,您确实需要从时间戳的毫秒值创建 java.util.Date,因为在特定实现中,当您尝试通过 Date 父类格式化时间戳时,我注意到毫秒发生了奇怪的事情。

        【讨论】:

        • 一个java.sql.Timestap一个java.util.Date,不需要构造一个新对象。
        • 你没有使用足够的时间戳。由于时间戳和日期的微小差异的奇怪,我遇到过许多身份、哈希码和等号失败的情况。这就是为什么我现在从提供给我的每个时间戳构造一个日期。
        • 是的,我今天只使用过时间戳。
        • 只要你保持一个或另一个,你应该没问题。然而,其中一种转换会降低毫秒数,并且仅在一个方向上。这就是为什么在构建另一个时最好从每个获取毫秒数。
        • 我很抱歉,因为我的评论假设不是这样。我没有注意到您的回答中确切说明了您这样做的原因的部分。
        猜你喜欢
        • 2021-02-17
        • 1970-01-01
        • 1970-01-01
        • 2017-04-08
        • 2021-09-24
        • 2021-01-29
        • 2018-07-20
        • 1970-01-01
        • 2013-04-11
        相关资源
        最近更新 更多