两个小时的总和

时间:2017-05-26 17:45:21

标签: java datetime

我正在开发一个我希望增加时间的应用程序。但我不知道如何考虑如何改变一天。如果我有

  

9:45 pm + 3:30

应该给出

  

凌晨1点15分

感谢您的帮助

4 个答案:

答案 0 :(得分:3)

 String time = "2:00 pm";
 SimpleDateFormat df = new SimpleDateFormat("hh:mm a");
 Date date = df.parse(time); 
 Calendar cal = Calendar.getInstance();
 cal.setTime(date);
 cal.add(Calendar.HOUR, 3);
 cal.add(Calendar.MINUTE, 30);
 int h = cal.get(Calendar.HOUR_OF_DAY);
 int m = cal.get(Calendar.MINUTE);

将于下午5:30打印

编辑:HOUR_OF_DAY提供24小时的

答案 1 :(得分:1)

prod=[]
def cartesian_product(set1,set2,n):
    if n>=1:
        for x in set1:
            for y in set2:
                prod.append('%s,%s'%(x,y))
        #prod='[%s]' % ', '.join(map(str, prod)) 
        #print prod
        cartesian_product(set1,prod,n-1)
    else:
        print prod


n=raw_input("Number of times to roll: ")
events=["1","2","3","4","5","6"]
cartesian_product(events,events,1)

输出:

import java.util.Calendar;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.DateFormat;

class SumHours{

    public static void main(String[] args){

        DateFormat dateFormat = new SimpleDateFormat("h:mm a");
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.HOUR_OF_DAY,21);
        cal.set(Calendar.MINUTE,45);

        Date d = cal.getTime();
        System.out.println(dateFormat.format(d));

        cal.add(Calendar.HOUR, 3);
        cal.add(Calendar.MINUTE, 30);
        d = cal.getTime();

        System.out.println(dateFormat.format(d));
    }
}

答案 2 :(得分:1)

由于有很多人想要回答这个重复的问题(正如我所看到的),我认为是时候有人贡献了现代答案。

我知道你使用的是Android Java 7,直到Java 8进入Android,现代的答案要求你使用外部库ThreeTenABP。但是,不仅在该库中较新的Java日期和时间类可以更好地使用,当涉及到时间算术时,这是他们有一个特别强大的点。所以想一想,试一试。这也是未来,因为这些类内置了Java 8及更高版本。

    DateTimeFormatter timeFormatter
            = DateTimeFormatter.ofPattern("h:mm a", Locale.ENGLISH);
    LocalTime startTime = LocalTime.of(21, 45);
    Duration hoursToAdd = Duration.ofHours(3).plusMinutes(30);
    LocalTime resultTime = startTime.plus(hoursToAdd);

    System.out.println("" + startTime.format(timeFormatter) + " + " + hoursToAdd 
            + " = " + resultTime.format(timeFormatter));

打印:

9:45 PM + PT3H30M = 1:15 AM

我想在你的问题中给你小写pmam以及3:30。我承认我们不在那里。特别是PT3H30M如果您还没有学习ISO 8601语法,那就很奇怪了。这意味着只需3小时30分钟,当您知道时很容易。 Duration对象不适合格式化,它在Java 9中会有所帮助,但只要Java 8尚未进入Android,我们就离开了。如果您更喜欢小写pm,则可以在this answer: displaying AM and PM in small letter after date formatting中找到解决方案。

我的代码可能没有其他答案中的代码那么短,但恕我直言,它更容易阅读。

更多链接

答案 3 :(得分:0)

如果你想在任何地方调用它,这是其中一个决定:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class TimeClass {

    static String timeStart24 = "21:45";
    static String timeStart = "09:45 PM";
    static String timeStep = "3:30";

    public String TimeClass(String start, String step) throws ParseException {
        // Take hours and minutes apart
        String[] time = step.split(":");
        // Create format of time
        SimpleDateFormat df = new SimpleDateFormat("hh:mm a");
        SimpleDateFormat df24 = new SimpleDateFormat("HH:mm");
        // Input begining time
        Date from = df.parse(start);
        System.out.println(df.format(from));
        System.out.println(df24.format(from) + " - 24 hours format");

        // Create calendar instance
        Calendar cal = Calendar.getInstance();
        cal.setTime(from);
        // Inner method add of Calendar
        cal.add(Calendar.HOUR_OF_DAY, Integer.parseInt(time[0]));
        cal.add(Calendar.MINUTE, Integer.parseInt(time[1]));

        System.out.println(df.format(cal.getTime()));
//            System.out.print(df24.format(cal.getTime()));
        return df.format(cal.getTime());
    }

    public static void main(String[] args) throws ParseException {
        TimeClass tc = new TimeClass();
        tc.TimeClass(timeStart, timeStep);
    }

}

<强>输出

09:45 PM
21:45 - 24 hours format
01:15 AM