如何重新格式化时间格式?

时间:2018-09-23 12:44:33

标签: java android datetime time time-format

我正在处理android项目,我从API接收的时间格式为“ 10:12:57 am”(12小时格式),我想以“ 10:12”格式显示它(在24小时制)。那时候该如何格式化?

因此findViewById(com.google.vr.widgets.common.R.id.ui_back_button).setVisibility(GONE); 应该成为12:42:41 am。并且00:42应该表示为02:13:39 pm

5 个答案:

答案 0 :(得分:3)

使用 java.time (现代方法)

String str = "10:12:57 pm";

DateTimeFormatter formatter_from = DateTimeFormatter.ofPattern( "hh:mm:ss a", Locale.US ); //Use pattern symbol "hh" for 12 hour clock
LocalTime localTime = LocalTime.parse(str.toUpperCase(), formatter_from );
DateTimeFormatter formatter_to = DateTimeFormatter.ofPattern( "HH:mm" , Locale.US ); // "HH" stands for 24 hour clock

System.out.println(localTime.format(formatter_to));

请参见BasilBourque答案below和OleV.V。回答here,以获得更好的解释。

使用 SimpleDateFormat

String str = "10:12:57 pm";

    SimpleDateFormat formatter_from = new SimpleDateFormat("hh:mm:ss a", Locale.US); 

    //Locale is optional. You might want to add it to avoid any cultural differences.

    SimpleDateFormat formatter_to = new SimpleDateFormat("HH:mm", Locale.US);

    try {
        Date d = formatter_from.parse(str);

        System.out.println(formatter_to.format(d));

    } catch (ParseException e) {           
        e.printStackTrace();
    }

如果您的输入是上午10:12:57,则输出将是10:12。如果字符串是10:12:57 pm,则输出将是22:12。

答案 1 :(得分:1)

tl; dr

LocalTime                                                    // Represent a time-of-day, without a date and without a time zone.
.parse(                                                      // Parse an input string to be a `LocalTime` object.
    "10:12:57 am".toUpperCase() ,                            // The cultural norm in the United States expects the am/pm to be in all-uppercase. So we convert our input value to uppercase.
    DateTimeFormatter.ofPattern( "hh:mm:ss a" , Locale.US )  // Specify a formatting pattern to match the input. 
)                                                            // Returns a `LocalTime` object.
.format(                                                     // Generate text representing the value in this date-time object.
    DateTimeFormatter.ofPattern( "HH:mm" , Locale.US )       // Note that `HH` in uppercase means 24-hour clock, not 12-hour.
)                                                            // Returns a `String`.
  

10:12

java.time

现代方法使用了几年前取代了可怕的DateCalendarSimpleDateFormat类的 java.time 类。

LocalTime类表示24小时通用日期中的一天中的时间,没有日期,也没有时区。

将字符串输入解析为LocalTime对象。

String input = ( "10:12:57 am" );
DateTimeFormatter fInput = DateTimeFormatter.ofPattern( "HH:mm:ss a" , Locale.US );
LocalTime lt = LocalTime.parse( input.toUpperCase() , fInput );  // At least in the US locale, the am/pm is expected to be in all uppercase: AM/PM. So we call `toUppercase` to convert input accordingly.
  

lt.toString():10:12:57

使用您希望的小时/分钟格式生成String文本。请注意,HH大写表示24小时制。

DateTimeFormatter fOutput = DateTimeFormatter.ofPattern( "HH:mm" , Locale.US );
String output = lt.format( fOutput );
  

输出:10:12


关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

目前位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

在哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

答案 2 :(得分:0)

您可以使用以下格式化程序:

SimpleDateFormat formatterFrom = new SimpleDateFormat("hh:mm:ss aa");
SimpleDateFormat formatterTo = new SimpleDateFormat("HH:mm");

Date date = formatterFrom.parse("10:12:57 pm");
System.out.println(formatterTo.format(date));

答案 3 :(得分:0)

尝试一下:

   SimpleDateFormat displayFormat = new SimpleDateFormat("HH:mm");
   SimpleDateFormat parseFormat = new SimpleDateFormat("hh:mm:ss a");
   try {
         Date date = parseFormat.parse("10:12:57 pm");
         System.out.println(parseFormat.format(date) + " = " + displayFormat.format(date));
       } 
   catch (Exception e) {
         e.printStackTrace();
       }  

给出了:

10:12:57 pm = 22:12

答案 4 :(得分:0)

SELECT tab2.cust_id,city, cust_type_cd,total_avail_balance FROM
customer RIGHT JOIN (SELECT SUM(avail_balance) total_avail_balance,cust_id
FROM `account` GROUP BY 2 HAVING SUM(avail_balance) BETWEEN 5000 AND 10000) tab2
ON tab2.cust_id = customer.cust_id;