将一串时间转换为24小时格式

时间:2011-09-15 17:26:16

标签: java datetime substring

我有一个string以这种格式保存开始时间和结束时间8:30AM - 9:30PM我希望能够删除AM -PM并转换所有时间到24小时格式,所以9:30PM真的是21:30,并且两个时间都存储在2个不同的变量中,我知道如何将字符串剥离到substrings但我不确定关于转换,这是我到目前为止。时间变量开始持有8:30AM - 9:30PM

String time = strLine.substring(85, 110).trim();
//time is "8:30AM - 9:30PM" 

String startTime;               
startTime = time.substring(0, 7).trim();
//startTime is "8:30AM"

String endTime;
endTime = time.substring(9).trim();
//endTime "9:30AM"

7 个答案:

答案 0 :(得分:8)

工作代码(考虑到您设法拆分字符串):

public class App {
  public static void main(String[] args) {
    try {
        System.out.println(convertTo24HoursFormat("12:00AM")); // 00:00
        System.out.println(convertTo24HoursFormat("12:00PM")); // 12:00
        System.out.println(convertTo24HoursFormat("11:59PM")); // 23:59
        System.out.println(convertTo24HoursFormat("9:30PM"));  // 21:30
    } catch (ParseException ex) {
        Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
    }
  }
  // Replace with KK:mma if you want 0-11 interval
  private static final DateFormat TWELVE_TF = new SimpleDateFormat("hh:mma");
  // Replace with kk:mm if you want 1-24 interval
  private static final DateFormat TWENTY_FOUR_TF = new SimpleDateFormat("HH:mm");

  public static String convertTo24HoursFormat(String twelveHourTime)
        throws ParseException {
    return TWENTY_FOUR_TF.format(
            TWELVE_TF.parse(twelveHourTime));
  }
}

现在我想到了,SimpleDateFormatH h K k可能令人困惑。

干杯。

答案 1 :(得分:4)

您需要使用:SimpleDateFormat
可以参考本教程:Formatting hour using SimpleDateFormat

示例:

//create Date object
Date date = new Date();

//formatting hour in h (1-12 in AM/PM) format like 1, 2..12.
String strDateFormat = "h";
SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat);

System.out.println("hour in h format : " + sdf.format(date));

答案 2 :(得分:3)

我不会重新发明轮子(除非你是作为学校项目或其他一些人这样做)。

只是从你的时间戳中获取一个日期对象,然后你就可以生成任何你想要的格式:SimpleDateFormat

[已编辑以满足您的特定要求] 如果你绝对需要使用自己独特的字符串,那么你会做这样的事情(我不知道你的字符串是什么样的......你正在使用像85这样的偏移量,这意味着什么都没有上下文)

我没有检查这个错误,但这大概是你想要的......

myStr = timestampString.toLowerCase(); //something like 8:30am
boolean add12 = (myStr.indexOf("pm") != -1)?true:false;

//convert hour to int
int hour = Integer.parseInt(myStr.split(":")[0]);

int minutes = Integer.parseInt(  myStr.split(":")[1].replaceAll("\\D+","").replaceAll("^0+","") ); //get the letters out of the minute part and get a number out of that, also, strip out leading zeros

int militaryTime = hour + (add12)? 12:0;
if(!add12 && militaryTime == 12)
 militaryTime = 0; //account for 12am

//dont' forget to add the leading zeros back in as you assemble your string

答案 3 :(得分:2)

使用Joda Time,代码如下:

        DateTimeFormatter formatter12 = DateTimeFormat.forPattern("K:mma");
        DateTime begin = formatter12.parseDateTime(beginTime);
        DateTime end = formatter12.parseDateTime(endTime);

        DateTimeFormatter formatter24 = DateTimeFormat.forPattern("k:mma");
        String begin24 = formatter24.print(begin);
        String end24 = formatter24.print(end);

答案 4 :(得分:2)

我想提供现代答案

    DateTimeFormatter twelveHourFormatter = DateTimeFormatter.ofPattern("h:mma", Locale.ENGLISH);

    String time = "8:30AM - 9:30PM";
    String[] times = time.split(" - ");
    LocalTime start = LocalTime.parse(times[0], twelveHourFormatter);
    System.out.println(start.toString());
    LocalTime end = LocalTime.parse(times[1], twelveHourFormatter);
    System.out.println(end.toString());

打印:

08:30
21:30

我使用的是现代Java日期和时间API java.time。许多其他答案中使用的SimpleDateFormat类已经过时了,而且总是很麻烦。使用java.time比1990年代的日期时间类更好。 LocalTime是一个没有约会(没有时区)的时间,因此比老式Date更适合您的需求。

链接: Oracle tutorial: Date Time解释如何使用java.time

答案 5 :(得分:1)

24小时时间增加12到大于12pm的任何时间,因此下午1点是13,依此类推,直到24或12点。这是sudo代码:

if(hour <= 12)
{
  hour = hour + 12;
}

答案 6 :(得分:0)

以下所有行都适用 String str =“07:05:45 PM”; 当你调用timeConversion(str)并希望转换为24小时格式..

 public class TimeConversion {

  private static final DateFormat TWELVE_TF = new SimpleDateFormat("hh:mm:ssa");
      private static final DateFormat TWENTY_FOUR_TF = new SimpleDateFormat("HH:mm:ss");


     static String timeConversion(String s) {

         String str = null;
         try {
            str= TWENTY_FOUR_TF.format(
                        TWELVE_TF.parse(s));
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

         return str;

     }

    public static void main(String[] args) throws ParseException {

        String str="07:05:45PM";

        System.out.println(timeConversion(str));


    }
}