时间转换 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")));
    }
}