从日历创建自定义日期对象?

时间:2014-12-16 10:32:31

标签: java date timer calendar simpledateformat

我需要创建一个自定义Date对象。我得到24小时格式的用户输入,如hh:mm,即17:49小时。 我想将小时和分钟分别设置为17和49,分别按照当前时间保留月,年,日等其他详细信息。例如,如果今天是2014年12月16日,时间是16:00,那么我想要一个日期对象为2014年12月16日,时间为17:49。我知道我可以使用弃用的apis来做到这一点,但是我不想使用它们。我需要日期对象,因为我需要将它传递给java计时器,因为java计时器不支持任何日历对象。

用户输入以字符串形式出现,我可以使用new SimpleDateFormat(HH:mm)构造函数解析该字符串。 我尝试使用Calendar.set apis但没有成功。

有人可以就如何继续进行指导。

PS。对不起,我不能用Joda时间:)

2 个答案:

答案 0 :(得分:3)

修改

由于getHours()getMinutes()已被弃用且已分别替换为Calendar.HOUR_OF_DAYCalendar.MINUTE,因此您可以使用中间日历对象或设置YEARDAY到当前值。


但是有一个问题,如果你像24:01一样输入第二天的小时,它就不会移动到第二天。上一个答案,拆分字符串正确地溢出。


public static void main(String[] args) throws ParseException {
    final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
    final String timeInterval = "12:01";
    Date date = simpleDateFormat.parse(timeInterval);
    final Calendar calendar = Calendar.getInstance(); //calendar object with current date
    calendar.setTime(date); //set date with day january 1 1970, this is because you parsed only the time part, the date objects assumes you start from it's lowest value, try a System.out.println(date) before this to see.
    calendar.set(Calendar.YEAR, Calendar.getInstance().get(Calendar.YEAR));
    calendar.set(Calendar.DATE,Calendar.getInstance().get(Calendar.DATE));
    calendar.set(Calendar.MONTH, Calendar.getInstance().get(Calendar.MONTH))
    date = calendar.getTime();
    System.out.println(date);
}

您可以使用Calendar设置时间,然后使用.getTime()方法提取日期,该方法会返回java.util.Date

我们的想法是根据分隔符:将字符串拆分为两部分。

然后只需初始化日历并使用这些值设置小时和分钟。

public static void main(String[] args) throws ParseException {
    final String userInput = "17:49";
    final String[] timeParts=userInput.split(":");
    Calendar cal=Calendar.getInstance(); //current moment calendar
    cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(timeParts[0]));
    cal.set(Calendar.MINUTE, Integer.parseInt(timeParts[1]));
    cal.set(Calendar.SECOND,0); //if you don't care about seconds
    final Date myDate=cal.getTime(); //assign the date object you need from calendar
    //use myDate object anyway you want ...
    System.out.println(myDate);
}

答案 1 :(得分:0)

以下代码运行正常,但我不想使用任何弃用的apis。

...
...
String timeInterval = "18:01";
Date date = simpleDateFormat.parse(timeInterval);
Calendar calendar = Calendar.getInstance();

calendar.set(Calendar.HOUR_OF_DAY, date.getHours());
calendar.set(Calendar.MINUTE, date.getMinutes());
date = calendar.getTime();

System.out.println(date);
...
...