我怎样才能用Java表示当天的时间?

时间:2014-01-23 20:32:01

标签: java date calendar

我希望能够创建各种日历,其中每一天都由时间段组成。在Java中表示此设置的最佳方法是什么?我正在解析信息,我将其作为 10:00 和一个int 3 ,其中int表示事件将花费的小时数。

我希望能够轻松添加事件,它们永远不会被删除,但它们通常会被查找。

我看了一下Java.text.DateFormat,希望它可以满足我的需求,但它似乎主要用于打印输出。

3 个答案:

答案 0 :(得分:4)

使用Joda-Time(或等待实现后继者的Java 8)。 这个lib包含强大的解析选项和方便的操作选项。如果你收到一个带有活动所需时间的int,你可以使用它来获得结束时间。

int hours = (parsed from input);
DateTimeFormatter dtf = DateTimeFormat.forPattern("HH:mm");     
LocalTime startTime = dtf.parseLocalTime(stringWithTimeFromUser);
LocalTime endTime = startTime.plusHours(hours);

如果您需要将其转换为日期时间,您也可以组合这些类。即如果您有日期时间并且只想更改用户提供的时间,您可以:

DateTime dateTime = getItFromSomewhere();
DateTime dateTimeWithNewTime = dateTime.withFields(localTime);

通常你会从用户那里得到日期;)

图书馆有广泛的文件,看那里。

答案 1 :(得分:2)

使用Joda-Time来表示实际时间。然后我将使用PrimeFaces Schedule组件(http://www.primefaces.org/showcase/ui/scheduleHome.jsf)进行显示。

这意味着学习JSF& JPA图书馆。

答案 2 :(得分:2)

No To Old Bundled Classes

避免捆绑的java.util.Date,java.util.Calendar和java.text.DateFormat / SimpleDateFormat类。他们是出了名的麻烦。

是Joda-Time

是的,Joda-Time 2.3有适合您需求的课程。

DateTime代表片刻。查看与时间跨度相关的PeriodDurationInterval类。

DateTime Class

DateTime表示时区和时区。与似乎具有时区但实际上没有的java.util.Date不同,DateTime确实具有分配的时区。几乎总是最好指定时区,否则您将获得JVM的默认时区。

期间等级

ISO 8601标准定义了一种表示时间跨度的文本方式,称为Duration。使用以下格式:PnYnMnDTnHnMnS。为了更灵活,你可以存储PT3H,其中“P”表示Period,“T”表示时间部分,“3H”表示3小时。在Joda-Time中,Period类将该字符串作为构造函数并在调用toString时输出它。因此,执行日历的一种方法是存储DateTime(开始)和ISO字符串“Duration”。

Period period = new Period( "PT3H" );

持续时间等级

另一种常见方法是以毫秒为单位存储持续时间。这基本上就是Joda-Time中的Duration字段,包含了毫秒数。

间隔等级

在Joda-Time中的Interval表示具有特定DateTime开始和DateTime结束的跨度。您可能不想存储它,但实例化此类对象可能还有其他用途。这个类提供了方便的方法,如“重叠”和containsNow。如果“containsNow”返回true,则表示现在正在发生相关事件。

DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTime startDateTime = new DateTime( 2014, 1, 23, 14, 0, 0, timeZone );
Interval interval = new Interval( startDateTime, period );

转储到控制台...

System.out.println( "interval: " + interval );

跑步时......

interval: 2014-01-23T14:00:00.000+01:00/2014-01-23T17:00:00.000+01:00

是java.time。*

Java 8带来java.time.* package定义的新JSR 310个类。这些课程的灵感来自Joda-Time,但完全是重新设计的。

您可以立即使用Joda-Time并继续使用Java 8,因为该项目将继续得到积极维护。稍后您将学习转换到java.time包。