36

我需要在当前日期设置时间。时间字符串始终采用 24 小时格式,但我得到的结果是错误的:

  SimpleDateFormat df = new SimpleDateFormat("kk:mm");
  Date d1 = df.parse("10:30");
  Calendar c1 = Calendar.getInstance();
  c1.set(Calendar.HOUR, d1.getHours());
  c1.set(Calendar.MINUTE, d1.getMinutes());

日期应为今天的日期,时间设置为 10:30。相反,c1 中的时间最终是 22:30。如何强制日历控件识别我的时间是 24 小时格式?

编辑: 如果我这样做:

Calendar c1 = Calendar.getInstance();
c1.set(Calendar.HOUR, 10);
c1.set(Calendar.MINUTE, 30);

这给了我同样的结果。为什么?

4

9 回答 9

192

替换这个:

c1.set(Calendar.HOUR, d1.getHours());

有了这个:

c1.set(Calendar.HOUR_OF_DAY, d1.getHours());

Calendar.HOUR 严格为 12 小时。

于 2013-02-20T14:18:35.370 回答
10

SimpleDateFormat df = new SimpleDateFormat("HH:mm");改为使用

更新

@Ingo 是对的。更好用setTime(d1);

第一种方法getHours()getMinutes()现已弃用

我测试这段代码

SimpleDateFormat df = new SimpleDateFormat("hh:mm");
  Date d1 = df.parse("23:30");
  Calendar c1 = GregorianCalendar.getInstance();
  c1.setTime(d1);
  System.out.println(c1.getTime());

并且输出没问题Thu Jan 01 23:30:00 FET 1970

尝试这个

SimpleDateFormat df = new SimpleDateFormat("KK:mm aa");
  Date d1 = df.parse("10:30 PM");
  Calendar c1 = GregorianCalendar.getInstance(Locale.US);
  SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");  
  c1.setTime(d1);
  String str = sdf.format(c1.getTime());
  System.out.println(str);
于 2013-02-20T13:23:44.317 回答
6

您可以将日历设置为仅使用 AM 或 PM 使用

calendar.set(Calendar.AM_PM, int);

0 = 上午

1 = 下午

希望这可以帮助

于 2014-02-11T10:09:16.900 回答
3

如果您将函数 SimpleDateFormat("hh") 替换为 ("HH") 将格式化 24 小时而不是 12 小时。

SimpleDateFormat df = new SimpleDateFormat("HH:mm");
于 2019-03-05T11:21:26.793 回答
2

我最近在我的项目中使用fullcalendar,我不知道你想要达到什么确切的视图效果,在我的项目中我想将事件时间视图从12h格式更改为

在此处输入图像描述

为 24 小时制。

在此处输入图像描述

如果这是您想要达到的效果,下面的解决方案可能会有所帮助:

timeFormat: 'H:mm'

于 2017-06-22T02:42:07.787 回答
1

私人无效 setClock() {

    Timeline clock = new Timeline(new KeyFrame(Duration.ZERO, e -> {
        Calendar cal = Calendar.getInstance();
        int second = cal.get(Calendar.SECOND);
        int minute = cal.get(Calendar.MINUTE);
        int  hour = cal.get(Calendar.HOUR_OF_DAY);
        eski_minut = minute;
        if(second < 10){

            time_label.setText(hour + ":" + (minute) + ":0" + second);

        }else if (minute < 10){
            time_label.setText(hour + ":0" + (minute) + ":0" + second);

        }
        else {
        time_label.setText(hour + ":" + (minute) + ":" + second);}
    }),
            new KeyFrame(Duration.seconds(1))
    );
    clock.setCycleCount(Animation.INDEFINITE);
    clock.play();
}
于 2017-11-29T11:44:31.700 回答
1

在这里你会遇到各种时间相关的问题。我希望这能解决你的问题。

public class MyClass {

    public static void main(String[] args) {


        Calendar cal = Calendar.getInstance();

        // To get the current hour
        int hour = cal.get(Calendar.HOUR_OF_DAY);
        System.out.println("hour: " + hour);

        // To get the current time in 12 hours format
        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a",Locale.US);
        String a = sdf.format(cal.getTime());
        System.out.println("Time: " + a);

        // To get the desired time in 12 hours format from 23 hours format
        cal.set(Calendar.HOUR_OF_DAY, 24);
        SimpleDateFormat sdf1 = new SimpleDateFormat("hh:mm a",Locale.ENGLISH);
        String a1 = sdf1.format(cal.getTime());
        System.out.println("Time: " + a1);

        /*  H Hour in day (0-23) 
            k Hour in day (1-24) 
        */

        //To get the desired time in 24 hours format as 0-23 or 1-24
        cal.set(Calendar.HOUR_OF_DAY, 24);
        SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm",Locale.ENGLISH);
        SimpleDateFormat sdf3 = new SimpleDateFormat("kk:mm",Locale.ENGLISH);
        String a2 = sdf2.format(cal.getTime());
        String a3 = sdf3.format(cal.getTime());
        System.out.println("Time: " + a2);
        System.out.println("Time: " + a3);

        //For example, time like 12:30 PM. How can i convert to 24 hours time in java?

        SimpleDateFormat bigFormat = new SimpleDateFormat("kk:mm");
        SimpleDateFormat smallFormat = new SimpleDateFormat("hh:mm a");

        Date date = null;
        try {
            date = smallFormat.parse("12:30 AM");
        } catch (ParseException e) {
            e.printStackTrace();
        }        
        System.out.println(smallFormat.format(date) + " = " + bigFormat.format(date));

    }

}
于 2017-03-31T07:49:09.980 回答
0

尝试这个 :

SimpleDateFormat df = new SimpleDateFormat("hh:mm");

或者

SimpleDateFormat df = new SimpleDateFormat("KK:mm");

参考:SimpleDateFormat

于 2013-02-20T13:25:39.847 回答
0

tl;博士

LocalTime.parse( "10:30" )  // Parsed as 24-hour time.

java.time

避免麻烦的旧日期时间类,例如现在被 java.time 类取代的 和DateCalendar

LocalTime

java.time 类提供了一种表示没有日期和时区的时间的方法:LocalTime

LocalTime lt = LocalTime.of( 10 , 30 );  // 10:30 AM.
LocalTime lt = LocalTime.of( 22 , 30 );  // 22:30 is 10:30 PM.

ISO 8601

java.time 类在生成和解析字符串时默认使用标准 ISO 8601 格式。这些格式使用 24 小时制。

String output = lt.toString();

LocalTime.of(10, 30).toString(): 10:30

LocalTime.of(22, 30).toString(): 22:30

因此解析10:30将被解释为上午 10:30。

LocalTime lt = LocalTime.parse( "10:30" );  // 10:30 AM.

DateTimeFormatter

如果您需要使用 AM/PM 生成或解析 12 小时点击格式的字符串,请使用DateTimeFormatter该类。提示:养成指定Locale.

于 2017-03-31T18:46:48.553 回答