时间转换12H至24H

时间:2017-09-11 16:05:33

标签: java time datetime-parsing datetime-conversion

我编写了这段代码,将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。

此外,如果您在查看我的代码后建议我一些良好的编码习惯,那将非常有用。

4 个答案:

答案 0 :(得分:2)

TL;博士

LocalTime
    .parse("07:05:45PM", DateTimeFormatter.ofPattern("hh:mm:ssa"))
    .toString()

Java新日期/时间API

另一种方法是使用内置的日期/时间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")));
    }
}