时间转换 12H 到 24H
Time Conversion 12H to 24H
我写了这段代码来将 12 小时制时间转换为 24 小时制时间,但是有一个输入:
07:05:45pm
我的输出为:
07: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 中传递命令行参数。
此外,如果您在看过我的代码后能建议我一些良好的编码习惯,那将非常有帮助。
tl;博士
LocalTime
.parse("07:05:45PM", DateTimeFormatter.ofPattern("hh:mm:ssa"))
.toString()
Java 新 Date/Time API
一种替代方法是使用内置的 date/time API。
如果您使用 Java 8,请考虑使用 new java.time API. It's easier, less bugged and less error-prone than the old APIs.
如果您使用 Java <= 7,您可以使用 ThreeTen Backport, a great backport for Java 8's new date/time classes. And for Android, you'll also need the ThreeTenABP (more on how to use it ).
下面的代码适用于两者。
唯一的区别是包名称(在 Java 8 中是 java.time
,在 ThreeTen Backport(或 Android 的 ThreeTenABP)中是 org.threeten.bp
),但是 类和方法名称是一样的。
由于我们只处理时间 (hour/minute/second),您可以使用 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 有关所有可用模式的更多信息。
I wrote this code to convert 12H time to 24H time but with an input:
我要为您检查的第一件事是条件 arr[8]==p
;这里是前一行的 p='p'
,但在字符串中,这个数组索引正在传递 'P'
,由于大写,它是一个单独的字符。
Also, it would be really helpful if you would suggest me some good
coding habits after looking at my code.
关于你的第二点建议习惯,评论评论评论。评论将有助于向其他最终用户解释您正在做什么,也许更重要的是,您自己。这有点像橡皮鸭调试。其次,给你的变量起更直观的名字;您的变量名都非常通用,需要时间来参考声明以查看发生了什么。
您提供的是 String s = "07:05:45PM";
,但考虑与 char p = 'p'
一起使用时,您应该同时考虑大写和小写,即 'p'
和 'P'
。还有,你没有考虑12:XX am
时间。例如12:05 AM
应该显示 00:05
.
为inteliJ idea提供论据,参考this。
Windows、Linux、一些 Mac:
ALT+SHIFT+F10,右, E, Enter, Tab, 输入你的命令行参数, 输入
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")));
}
}
我写了这段代码来将 12 小时制时间转换为 24 小时制时间,但是有一个输入:
07:05:45pm
我的输出为:
07: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 中传递命令行参数。
此外,如果您在看过我的代码后能建议我一些良好的编码习惯,那将非常有帮助。
tl;博士
LocalTime
.parse("07:05:45PM", DateTimeFormatter.ofPattern("hh:mm:ssa"))
.toString()
Java 新 Date/Time API
一种替代方法是使用内置的 date/time API。
如果您使用 Java 8,请考虑使用 new java.time API. It's easier, less bugged and less error-prone than the old APIs.
如果您使用 Java <= 7,您可以使用 ThreeTen Backport, a great backport for Java 8's new date/time classes. And for Android, you'll also need the ThreeTenABP (more on how to use it
下面的代码适用于两者。
唯一的区别是包名称(在 Java 8 中是 java.time
,在 ThreeTen Backport(或 Android 的 ThreeTenABP)中是 org.threeten.bp
),但是 类和方法名称是一样的。
由于我们只处理时间 (hour/minute/second),您可以使用 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 有关所有可用模式的更多信息。
I wrote this code to convert 12H time to 24H time but with an input:
我要为您检查的第一件事是条件 arr[8]==p
;这里是前一行的 p='p'
,但在字符串中,这个数组索引正在传递 'P'
,由于大写,它是一个单独的字符。
Also, it would be really helpful if you would suggest me some good coding habits after looking at my code.
关于你的第二点建议习惯,评论评论评论。评论将有助于向其他最终用户解释您正在做什么,也许更重要的是,您自己。这有点像橡皮鸭调试。其次,给你的变量起更直观的名字;您的变量名都非常通用,需要时间来参考声明以查看发生了什么。
您提供的是 String s = "07:05:45PM";
,但考虑与 char p = 'p'
一起使用时,您应该同时考虑大写和小写,即 'p'
和 'P'
。还有,你没有考虑12:XX am
时间。例如12:05 AM
应该显示 00:05
.
为inteliJ idea提供论据,参考this。
Windows、Linux、一些 Mac:
ALT+SHIFT+F10,右, E, Enter, Tab, 输入你的命令行参数, 输入
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")));
}
}