我编写了这段代码,将12H时间转换为24H时间但输入:
下午7点05分45秒
我输出为:
7时05分45秒
这是代码
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Demo
{
static String timeConversion(String s)
{
// Complete this function
char a = 'a';
char l = 0, m = 0;
int l1 = 0, m1 = 0;
final int RADIX = 10;
char p = 'p';
String str = new String();
char t1 = 0;
int t2 = 0;
char arr[] = new char[10];
arr = s.toCharArray();
int a1 = Character.getNumericValue(arr[0]);
int a2 = Character.getNumericValue(arr[1]);
int t = (10*a1)+(a2);
char _1 = '1', _2 = '2';
if(arr[8]==p)
{
if((arr[0]==(_1))&&(arr[1]==(_2)))
{
char arr1[] = new char[8];
for(int i = 0; i < 8; i++)
arr1[i] = arr[i];
str=String.copyValueOf(arr1);
}
else
{
t2 = t + 12;
l1 = (t2%10);
t2/=10;
m1 = (t2%10);
m = Character.forDigit(m1, RADIX);
l = Character.forDigit(l1, RADIX);
arr[1] = l;
arr[0] = m;
char arr1[] = new char[8];
for(int i = 0; i < 8; i++)
arr1[i] = arr[i];
str=String.copyValueOf(arr1);
}
}
else
{
char arr1[] = new char[8];
for(int i = 0; i < 8; i++)
arr1[i] = arr[i];
str=String.copyValueOf(arr1);
}
return str;
}
public static void main(String[] args)
{
//Scanner in = new Scanner(System.in);
//String s = in.next();
String s = "07:05:45PM";
String result = timeConversion(s);
System.out.println(result);
}
}
正如你所看到的,我已经对输入进行了硬编码,因为intellij不允许我传递命令行参数,所以我也想知道如何在intellij中传递命令行argumnets。
此外,如果您在查看我的代码后建议我一些良好的编码习惯,那将非常有用。
答案 0 :(得分:2)
LocalTime
.parse("07:05:45PM", DateTimeFormatter.ofPattern("hh:mm:ssa"))
.toString()
另一种方法是使用内置的日期/时间API。
如果您使用 Java 8 ,请考虑使用new java.time API。它更容易,less bugged and less error-prone than the old APIs。
如果您正在使用 Java&lt; = 7 ,则可以使用ThreeTen Backport,这是Java 8新日期/时间类的绝佳后端。对于 Android ,您还需要ThreeTenABP(更多关于如何使用它here)。
以下代码适用于两者。
唯一的区别是包名称(在Java 8中为java.time
而在ThreeTen Backport(或Android的ThreeTenABP中)为org.threeten.bp
),但类和方法名称是一样的。
由于我们只处理时间(小时/分钟/秒),您可以使用LocalTime
。您还需要具有指定格式的DateTimeFormatter
来解析它:
String s = "07:05:45PM";
// formatter with format "hour:minute:second" followed by "AM/PM"
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("hh:mm:ssa");
// parse and get the result as a String
String result = LocalTime.parse(s, fmt).toString();
System.out.println(result);
输出将是:
19时05分45秒
使用内置API比重新发明轮子要好得多(除非您仅为了学习目的而进行编码)。
如果您希望以不同的格式输出,只需使用所需的模式创建另一个DateTimeFormatter
并使用format
方法。 Check the javadoc了解有关所有可用模式的详细信息。
答案 1 :(得分:0)
我编写了这段代码,将12H时间转换为24H时间但输入:
我要检查的第一件事是arr[8]==p
;这里的p='p'
来自前一行,但是在字符串中,这个数组索引传递'P'
,由于大小写,它是一个单独的char。
另外,如果你建议我一些好的话会很有帮助 查看我的代码后的编码习惯。
关于建议习惯,评论,评论,评论的第2点。评论将有助于向另一个最终用户解释您正在做的事情,或许更重要的是,您自己。这有点像橡皮鸭调试。其次,给你的变量更直观的名字;您的变量名称都非常通用,并且需要时间来返回声明以查看正在发生的事情。
答案 2 :(得分:0)
您正在提供String s = "07:05:45PM";
,但考虑使用char p = 'p'
,您应该考虑上限和小写,同时表示'p'
和'P'
。此外,您还没有考虑12:XX am
时间。例如12:05 AM
应显示00:05
。
要为inteliJ想法提供论据,请参阅this。
Windows,Linux,一些Mac:
ALT + SHIFT + F10 ,右, E ,输入, Tab ,输入命令行参数,输入
答案 3 :(得分:0)
import java.text.SimpleDateFormat;
import java.util.Date;
public class HelloWorld
{
public static void main(String [] args) throws Exception
{
SimpleDateFormat displayFormat = new SimpleDateFormat("HH:mm");
SimpleDateFormat parseFormat = new SimpleDateFormat("hh:mm a");
System.out.println(displayFormat.format(parseFormat.parse("07:05 PM")));
}
}