繁体   English   中英

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

[英]How can I represent time of the day in Java?

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

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

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

使用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);

通常你也可以从用户那里得到日期;)

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

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

这意味着学习JSF和JPA库。

不要旧的捆绑类

避免捆绑的java.util.Date,java.util.Calendar和java.text.DateFormat / SimpleDateFormat类。 众所周知,它们很麻烦。

是Joda-Time

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

DateTime代表片刻。 请参阅与Interval跨度相关的PeriodDurationInterval类。

DateTime类

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

期间类

ISO 8601标准定义了表示时间跨度的文本方式,称为持续时间 使用以下格式: 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带来了一个由JSR 310定义的新的java.time。*包类。 这些课程的灵感来自Joda-Time,但完全是重新设计的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM