Ответ 1
Замените это:
c1.set(Calendar.HOUR, d1.getHours());
с этим:
c1.set(Calendar.HOUR_OF_DAY, d1.getHours());
Calendar.HOUR строго в течение 12 часов.
Мне нужно установить время на текущую дату. Строка времени всегда находится в 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-часовой формат?
EDIT: Если я просто сделаю это:
Calendar c1 = Calendar.getInstance();
c1.set(Calendar.HOUR, 10);
c1.set(Calendar.MINUTE, 30);
Это дает мне тот же результат. Почему?
Замените это:
c1.set(Calendar.HOUR, d1.getHours());
с этим:
c1.set(Calendar.HOUR_OF_DAY, d1.getHours());
Calendar.HOUR строго в течение 12 часов.
используйте SimpleDateFormat df = new SimpleDateFormat("HH:mm");
вместо
UPDATE
@Инго прав. лучше использовать 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);
Вы можете настроить календарь для использования только AM или PM, используя
calendar.set(Calendar.AM_PM, int);
0 = AM
1 = PM
Надеюсь, что это поможет
Попробуйте следующее:
SimpleDateFormat df = new SimpleDateFormat("hh:mm");
или
SimpleDateFormat df = new SimpleDateFormat("KK:mm");
Ссылка: SimpleDateFormat
Здесь вы получите все виды связанных с этим проблем. Я надеюсь, что это решит вашу проблему.
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));
}
}
LocalTime.parse( "10:30" ) // Parsed as 24-hour time.
Избегайте проблемных старых классов времени, таких как Date
и Calendar
, которые теперь вытесняются классами java.time.
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.
В классах 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
Если вам нужно сгенерировать или проанализировать строки в 12-часовом формате щелчка с AM/PM, используйте класс DateTimeFormatter
. Совет. Сделайте привычку указывать Locale
.
private void 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();
}
Я использую fullcalendar в моем проекте недавно, я не знаю, какого точного эффекта просмотра вы хотите достичь, в моем проекте я хочу изменить представление времени события из 12-го формата из
в формате 24h.
Если это тот эффект, который вы хотите достичь, решение ниже может помочь:
set timeFormat: 'H:mm'