在我的应用程序中,我想将给定的CDT格式的24小时字符串转换为CDT格式的12小时字符串,如何将给定的24小时格式字符串转换为12小时格式字符串?
以下是将24小时制时间转换为带上午下午的12小时制代码。
注意: 如果不需要上午/下午,则将 hh:mm a
替换为 hh:mm
。
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String [] args) throws Exception {
try {
String _24HourTime = "22:15";
SimpleDateFormat _24HourSDF = new SimpleDateFormat("HH:mm");
SimpleDateFormat _12HourSDF = new SimpleDateFormat("hh:mm a");
Date _24HourDt = _24HourSDF.parse(_24HourTime);
System.out.println(_24HourDt);
System.out.println(_12HourSDF.format(_24HourDt));
} catch (Exception e) {
e.printStackTrace();
}
}
}
//OUTPUT WOULD BE
//Thu Jan 01 22:15:00 IST 1970
//10:15 PM
另一种解决方案:
System.out.println(hr%12 + ":" + min + " " + ((hr>=12) ? "PM" : "AM"));
您可以尝试使用SimpleDateFormat
对象来转换时间格式。
final String time = "23:15";
try {
final SimpleDateFormat sdf = new SimpleDateFormat("H:mm");
final Date dateObj = sdf.parse(time);
System.out.println(dateObj);
System.out.println(new SimpleDateFormat("K:mm").format(dateObj));
} catch (final ParseException e) {
e.printStackTrace();
}
这里是SimpleDateFormat的javadoc 链接。
使用Java 8,可以使用类java.time.LocalTime
将其完成一行代码中。
示例代码:
String result = LocalTime.parse(time, DateTimeFormatter.ofPattern("HH:mm")).format(DateTimeFormatter.ofPattern("hh:mm a"));
对于较早的 Android 版本,请使用 ThreeTen-Backport 项目,该项目已适配成 Android 中的 ThreeTenABP 项目。请参见 如何在 Android 项目中使用 ThreeTenABP。
String result = localTimeInstance.format(DateTimeFormatter.ofPattern("hh:mm a"));
- Saleh Rezq对于使用较低api版本的用户, 如果时间为12:00 AM或PM且分钟数小于10,则正常工作。
String time = ((hourOfDay > 12) ? hourOfDay % 12 : hourOfDay) + ":" + (minute < 10 ? ("0" + minute) : minute) + " " + ((hourOfDay >= 12) ? "PM" : "AM")
输出示例:上午 0:0
下午 12:00
上午 9:09
感谢 @Lalit Jawale 上面的回答。
LocalTime.parse
需要 API 26 或更高版本。 - Xianwei如果您想知道K、k、H和h之间的区别:
H 一天中的小时(0-23) 数字 0 1+
k 一天中的小时(1-24) 数字 24 1+
K 上午/下午的小时(0-11) 数字 0 1+
h 上午/下午的小时(1-12) 数字 12 1+
// time is your string value i.e., 24 hour time
try {
final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
final Date dateObj = sdf.parse(time);
time = new SimpleDateFormat("hh:mm aa").format(dateObj);
} catch (final ParseException e) {
e.printStackTrace();
}
使用(K:mm)格式的SimpleDateFormat可以正常工作,但是对于时间为12:00 AM或12:00 PM的情况无法正常工作。
您可以使用上述代码将12小时制转换为24小时制,同时包括AM/PM...它能正常工作。
如果不必要的话,我不喜欢使用类似于SimpleDateFormat
这样的类。你只需要检查三个条件。以下是一些替代方案:
简单:
if(hour>11) {
suffix = "PM";
if(hour>12)
hour -= 12;
} else {
suffix = "AM";
if(hour==0)
hour = 12;
}
简述:
suffix = (hour>11) ? "PM" : "AM";
hour = (hour>12) ? hour-=12 : ((hour==0) ? 12 : hour);
结果:
00:00 = 12:00 AM, 01:00 = 01:00 AM, 02:00 = 02:00 AM, 03:00 = 03:00 AM, 04:00 = 04:00 AM, 05:00 = 05:00 AM, 06:00 = 06:00 AM, 07:00 = 07:00 AM, 08:00 = 08:00 AM, 09:00 = 09:00 AM, 10:00 = 10:00 AM, 11:00 = 11:00 AM, 12:00 = 12:00 PM, 13:00 = 01:00 PM, 14:00 = 02:00 PM, 15:00 = 03:00 PM, 16:00 = 04:00 PM, 17:00 = 05:00 PM, 18:00 = 06:00 PM, 19:00 = 07:00 PM, 20:00 = 08:00 PM, 21:00 = 09:00 PM, 22:00 = 10:00 PM, 23:00 = 11:00 PM
fun convertTo12Hours(militaryTime: String): String{
//in => "14:00:00"
//out => "02:00 PM"
val inputFormat = SimpleDateFormat("hh:mm:ss", Locale.getDefault())
val outputFormat = SimpleDateFormat("hh:mm aa", Locale.getDefault())
val date = inputFormat.parse(militaryTime)
return outputFormat.format(date)
}
int n=2;
int result= n-12;
if (result>o) {
system.out.println(result+"pm");
} else {
system.out.prinln(result+"am");
}
这是我的解决方案:
/*
* hour in 24Format -> AM/PM Format
*/
public String format(int hour, int minutes ){
String meridiem = hour > 11 ? "PM" : "AM";
// trim "0-23 hour" to "0-11 hour", then replace "0" with "12"
hour = (hour %= 12) == 0 ? 12 : hour;
// Apply desired format "HH:MM AM/PM"
return String.format("%02d:%02d %s", hour, minutes, meridiem );
}
System.out.println((((hourOfDay % 12 == 0) ? "12" : ((hourOfDay % 12) > 9 ? (hourOfDay % 12) : "0" + (hourOfDay % 12))) + ":" + ((minute > 9) ? minute : ("0" + minute)) + " " + ((hourOfDay >= 12) ? "PM" : "AM")));
- Renish Patel