我有一个string
以这种格式保存开始时间和结束时间8:30AM - 9:30PM
我希望能够删除AM -
和PM
并转换所有时间到24小时格式,所以9:30PM
真的是21:30
,并且两个时间都存储在2个不同的变量中,我知道如何将字符串剥离到substrings
但我不确定关于转换,这是我到目前为止。时间变量开始持有8:30AM - 9:30PM
。
String time = strLine.substring(85, 110).trim();
//time is "8:30AM - 9:30PM"
String startTime;
startTime = time.substring(0, 7).trim();
//startTime is "8:30AM"
String endTime;
endTime = time.substring(9).trim();
//endTime "9:30AM"
答案 0 :(得分:8)
工作代码(考虑到您设法拆分字符串):
public class App {
public static void main(String[] args) {
try {
System.out.println(convertTo24HoursFormat("12:00AM")); // 00:00
System.out.println(convertTo24HoursFormat("12:00PM")); // 12:00
System.out.println(convertTo24HoursFormat("11:59PM")); // 23:59
System.out.println(convertTo24HoursFormat("9:30PM")); // 21:30
} catch (ParseException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
}
// Replace with KK:mma if you want 0-11 interval
private static final DateFormat TWELVE_TF = new SimpleDateFormat("hh:mma");
// Replace with kk:mm if you want 1-24 interval
private static final DateFormat TWENTY_FOUR_TF = new SimpleDateFormat("HH:mm");
public static String convertTo24HoursFormat(String twelveHourTime)
throws ParseException {
return TWENTY_FOUR_TF.format(
TWELVE_TF.parse(twelveHourTime));
}
}
现在我想到了,SimpleDateFormat,H h K k
可能令人困惑。
干杯。
答案 1 :(得分:4)
您需要使用:SimpleDateFormat
可以参考本教程:Formatting hour using SimpleDateFormat
示例:
//create Date object
Date date = new Date();
//formatting hour in h (1-12 in AM/PM) format like 1, 2..12.
String strDateFormat = "h";
SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat);
System.out.println("hour in h format : " + sdf.format(date));
答案 2 :(得分:3)
我不会重新发明轮子(除非你是作为学校项目或其他一些人这样做)。
只是从你的时间戳中获取一个日期对象,然后你就可以生成任何你想要的格式:SimpleDateFormat
[已编辑以满足您的特定要求] 如果你绝对需要使用自己独特的字符串,那么你会做这样的事情(我不知道你的字符串是什么样的......你正在使用像85这样的偏移量,这意味着什么都没有上下文)
我没有检查这个错误,但这大概是你想要的......
myStr = timestampString.toLowerCase(); //something like 8:30am
boolean add12 = (myStr.indexOf("pm") != -1)?true:false;
//convert hour to int
int hour = Integer.parseInt(myStr.split(":")[0]);
int minutes = Integer.parseInt( myStr.split(":")[1].replaceAll("\\D+","").replaceAll("^0+","") ); //get the letters out of the minute part and get a number out of that, also, strip out leading zeros
int militaryTime = hour + (add12)? 12:0;
if(!add12 && militaryTime == 12)
militaryTime = 0; //account for 12am
//dont' forget to add the leading zeros back in as you assemble your string
答案 3 :(得分:2)
使用Joda Time,代码如下:
DateTimeFormatter formatter12 = DateTimeFormat.forPattern("K:mma");
DateTime begin = formatter12.parseDateTime(beginTime);
DateTime end = formatter12.parseDateTime(endTime);
DateTimeFormatter formatter24 = DateTimeFormat.forPattern("k:mma");
String begin24 = formatter24.print(begin);
String end24 = formatter24.print(end);
答案 4 :(得分:2)
我想提供现代答案
DateTimeFormatter twelveHourFormatter = DateTimeFormatter.ofPattern("h:mma", Locale.ENGLISH);
String time = "8:30AM - 9:30PM";
String[] times = time.split(" - ");
LocalTime start = LocalTime.parse(times[0], twelveHourFormatter);
System.out.println(start.toString());
LocalTime end = LocalTime.parse(times[1], twelveHourFormatter);
System.out.println(end.toString());
打印:
08:30
21:30
我使用的是现代Java日期和时间API java.time
。许多其他答案中使用的SimpleDateFormat
类已经过时了,而且总是很麻烦。使用java.time
比1990年代的日期时间类更好。 LocalTime
是一个没有约会(没有时区)的时间,因此比老式Date
更适合您的需求。
链接: Oracle tutorial: Date Time解释如何使用java.time
。
答案 5 :(得分:1)
24小时时间增加12到大于12pm的任何时间,因此下午1点是13,依此类推,直到24或12点。这是sudo代码:
if(hour <= 12)
{
hour = hour + 12;
}
答案 6 :(得分:0)
以下所有行都适用 String str =“07:05:45 PM”; 当你调用timeConversion(str)并希望转换为24小时格式..
public class TimeConversion {
private static final DateFormat TWELVE_TF = new SimpleDateFormat("hh:mm:ssa");
private static final DateFormat TWENTY_FOUR_TF = new SimpleDateFormat("HH:mm:ss");
static String timeConversion(String s) {
String str = null;
try {
str= TWENTY_FOUR_TF.format(
TWELVE_TF.parse(s));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
public static void main(String[] args) throws ParseException {
String str="07:05:45PM";
System.out.println(timeConversion(str));
}
}