Java 将4位数的军用时间转换为标准的12小时时间格式
我想做什么: 我正在尝试将4位数的军事时间转换为标准的12小时时间格式,使用冒号和添加的PM或AM,而无需在我的代码之前导入任何内容(我正在创建一个只需要java 101技术的方法) 我的处境: 我有milTime,我现在每次运行它时都会手动更改它(如上面声明的,目前为1100),直到我将它转换为一个方法并提交赋值,在这个赋值中它将接收milTime,并返回milTimeString以供主程序打印。我目前正在使用BlueJ作为IDE(我不确定这是否是最好的使用方式?) 输入和输出示例: 如果给我0056分,我将不得不在上午12:56返回。 如果给我1125分,我就得上午11点25分回来。 如果给2359,我就得晚上11点59分回来 我需要帮助的问题Java 将4位数的军用时间转换为标准的12小时时间格式,java,datetime,time,formatting,Java,Datetime,Time,Formatting,我想做什么: 我正在尝试将4位数的军事时间转换为标准的12小时时间格式,使用冒号和添加的PM或AM,而无需在我的代码之前导入任何内容(我正在创建一个只需要java 101技术的方法) 我的处境: 我有milTime,我现在每次运行它时都会手动更改它(如上面声明的,目前为1100),直到我将它转换为一个方法并提交赋值,在这个赋值中它将接收milTime,并返回milTimeString以供主程序打印。我目前正在使用BlueJ作为IDE(我不确定这是否是最好的使用方式?) 输入和输出示例: 如果给我
public class timeTest
{
public static void main(String []args)
{
/*Declare my variables*/
int milTime = 2400;
String timeString = "";
boolean pm;
/*determine AM or PM and convert over 1200 into a clock's digits */
if (milTime >1259)
{
if (milTime <1200)
{
pm = false;
}
else
{
pm = true;
}
milTime = (milTime - 1200);
}
else
{
}
/*figure out my digits*/
int fourthDigit = milTime%10;
milTime = milTime/10;
int thirdDigit = milTime%10;
milTime = milTime/10;
int secondDigit = milTime%10;
milTime = milTime/10;
int firstDigit = milTime%10;
/*build each side of the colon*/
String hoursString = thirdDigit + "" + fourthDigit;
String minutesString = firstDigit + "" + secondDigit;
/*determine if the first digit is zero and if so, omit it*/
if (firstDigit == 0 )
{
minutesString = "" + secondDigit;
}
else
{
}
if (secondDigit == 0)
{
minutesString = "12";
}
else
{
}
/*build the total string and return the result with AM or PM based on conditional boolean.*/
if (pm = true)
{
timeString = (minutesString + ':' + hoursString + "pm");
}
else
{
}
if (pm = false)
{
timeString = (minutesString + ':' + hoursString + "am");
}
else
{
}
System.out.println(timeString);
}
}
公共类时间测试
{
公共静态void main(字符串[]args)
{
/*声明我的变量*/
int milTime=2400;
字符串timeString=“”;
布尔pm;
/*确定AM或PM,并将超过1200转换为时钟的数字*/
如果(milTime>1259)
{
如果(米尔蒂姆)
单个等号是赋值。要进行比较:
if (pm == true)
if (pm == false)
这些也可以更习惯地写为:
if (pm)
if (!pm)
这是主要问题。另一个是设置pm
的逻辑。您只需要一个if
语句,行减法1200放在pm=true
块中
if (milTime < 1200)
{
pm = false;
}
else
{
pm = true;
milTime -= 1200;
}
if(milTime<1200)
{
pm=假;
}
其他的
{
pm=真;
milTime-=1200;
}
我将留给您一些其他错误。我相信这些更正至少会让您走得更远。您可以使用巧妙的字符串转换和SimpleDateFormat来做这件事,这是一个示例,但分为两行:
// Heres your military time int like in your code sample
int milTime = 56;
// Convert the int to a string ensuring its 4 characters wide, parse as a date
Date date = new SimpleDateFormat("hhmm").parse(String.format("%04d", milTime));
// Set format: print the hours and minutes of the date, with AM or PM at the end
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a");
// Print the date!
System.out.println(sdf.format(date));
// Output: 12:56 AM
您的问题是,您应该使用自己的自定义数据格式化程序。我喜欢使用及其DateTime类,而不是内置的Java Date和Calendar类。因此,我建议您使用来创建,然后使用来将字符串转换为。您需要一个DateTime类,而不是SimpleDateFormat每个输入和输出的meFormatter。例如:
String rawTimestamp = "2300"; // For example
DateTimeFormatter inputFormatter = DateTimeFormat.forPattern("HHmm");
DateTimeFormatter outputFormatter = DateTimeFormat.forPattern("hh:mm a");
DateTime dateTime = inputFormatter.parseDateTime(rawTimestamp);
String formattedTimestamp = outputFormatter.print(dateTime.getMillis());
return formattedTimestamp;
试试看!公共静态字符串转换器24hourtomam(字符串时间){
public static String convert24HourToAmPm(String time) {
if (time == null)
return time;
// Convert time where time is like: 0100, 0200, 0300....2300...
if (time.length() == 4 && Helper.isInteger(time)) {
String hour = time.substring(0,2);
String minutes = time.substring(2,4);
String meridian = "am";
if (hour.substring(0,2).equals("00")) {
hour = "12";
} else if (hour.substring(0,1).equals("1") || hour.substring(0,1).equals("2")) {
meridian = "pm";
Integer militaryHour = Integer.parseInt(hour);
Integer convertedHour = null;
if (militaryHour > 12) {
convertedHour = (militaryHour - 12);
if (convertedHour < 10)
hour = "0" + String.valueOf(convertedHour);
else
hour = String.valueOf(convertedHour);
}
}
time = hour + ":" + minutes + " " + meridian;
}
// TODO - Convert time where time is like 01:00...23:00...
return time;
}
if(time==null)
返回时间;
//转换时间,时间如下:0100200300…2300。。。
if(time.length()==4&&Helper.isInteger(time)){
字符串小时=时间。子字符串(0,2);
字符串分钟数=时间。子字符串(2,4);
字符串meridian=“am”;
if(小时子串(0,2)等于(“00”)){
小时=“12”;
}else如果(hour.substring(0,1).等于(“1”)| | hour.substring(0,1).等于(“2”)){
子午线=“pm”;
整数军事小时=整数.parseInt(小时);
整数convertedHour=null;
如果(军事小时>12){
换算小时=(军事小时-12);
如果(换算小时<10)
hour=“0”+字符串.valueOf(convertedHour);
其他的
小时=字符串.valueOf(convertedHour);
}
}
时间=小时+:“+分钟+”+子午线;
}
//TODO-将时间转换为01:00…23:00。。。
返回时间;
}
如果您不想编码,您可以使用Joda Time Formatter轻松完成此任务:虽然我很想使用此库,但我不能,因为我的课程很初级。导入此库将降低我的作业成绩,因为我必须证明我可以在没有它的情况下完成此任务。非常感谢您的回复虽然!感谢您的回复,但作业特别要求不要为我们导入任何库或外部函数。
public static String convert24HourToAmPm(String time) {
if (time == null)
return time;
// Convert time where time is like: 0100, 0200, 0300....2300...
if (time.length() == 4 && Helper.isInteger(time)) {
String hour = time.substring(0,2);
String minutes = time.substring(2,4);
String meridian = "am";
if (hour.substring(0,2).equals("00")) {
hour = "12";
} else if (hour.substring(0,1).equals("1") || hour.substring(0,1).equals("2")) {
meridian = "pm";
Integer militaryHour = Integer.parseInt(hour);
Integer convertedHour = null;
if (militaryHour > 12) {
convertedHour = (militaryHour - 12);
if (convertedHour < 10)
hour = "0" + String.valueOf(convertedHour);
else
hour = String.valueOf(convertedHour);
}
}
time = hour + ":" + minutes + " " + meridian;
}
// TODO - Convert time where time is like 01:00...23:00...
return time;
}