PM更改为AM Java

时间:2016-06-23 06:26:47

标签: java

我有一个计算时间间隔的程序。当我输入timeTo与PM的时间时,它变为AM(当我调试它时)。 这是代码:

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");


    Scanner sc = new Scanner(System.in);

    System.out.print("Enter date: "); //ex: input 2016-02-16
    String dateFrom = sc.nextLine();

    System.out.print("Enter time from: "); //ex input: 09:00 AM
    String timeFrom = sc.nextLine();

    System.out.print("Enter time to: "); //ex input: 05:00 PM
    String timeTo = sc.nextLine();

    String substring = timeTo.substring(Math.max(timeTo.length() - 2, 0));
    String substring1 = timeFrom.substring(Math.max(timeFrom.length() - 2, 0));

    Calendar c = Calendar.getInstance();
    try {
        c.setTime(dateformat.parse(dateFrom));
    } catch (Exception e) {
    }
    if ("AM".equals(substring) && "AM".equals(substring1)) {
        c.add(Calendar.DATE, 1);
    } else if ("AM".equals(substring)) {
        c.add(Calendar.DATE, 1);
    }

    Date date1 = c.getTime();

    dateTo = dateformat.format(date1);

    Date d1 = new Date();
    Date d2 = new Date();

    try {
        d1 = format.parse(dateFrom + " " + timeFrom);
        d2 = format.parse(dateTo + " " + timeTo); // instead of 2016-02-16 05:00:00 PM
      //  it becomes 2016-02-16 05:00:00 AM
    } catch (Exception e) {
    }

    long diffMin = (d2.getTime() - d1.getTime()) / (60 * 1000) % 60;
    long diffHour = (d2.getTime() - d1.getTime()) / (60 * 60 * 1000) % 24;

    double d = (double) diffMin;
    double d3 = (double) diffHour; // -4.0 because 05:00 AM - 09:00 AM

与上面的示例一样,timeFrom的输入值为09:00 AM,timeTo为05:00 PM,传递给d2时为05:00 AM。

1 个答案:

答案 0 :(得分:1)

您使用的是错误的日期格式字符串。 HH是"一天中的小时"在24小时格式,即0-23,没有关于AM / PM那里(所以任何< 12将是AM)。

您必须使用hh 12小时格式(假设您需要1-12小时,0-11使用kk)。您还必须明确添加AM / PM标记。所以你最终应该

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm a");

查看java.text.SimpleDateFormat的API文档,它解释了format-string中的所有可能元素。