java 时间常量_date-Java中的时间常量?

date-Java中的时间常量?

是否有一个Java包,其中包含所有令人讨厌的时间常数,例如分钟/小时/天/年的毫秒/秒/分钟? 我讨厌重复这样的事情。

12个解决方案

111 votes

如果您的项目中尚未包括joda-time,我将使用java TimeUnit。 您不需要包括外部库,这很简单。

每当您需要这些“烦人的常数”时,通常都需要它们使一些数字相互交叉以进行跨单位转换。 相反,您可以使用TimeUnit来简单地转换值,而无需显式乘法。

这个:

long millis = hours * MINUTES_IN_HOUR * SECONDS_IN_MINUTE * MILLIS_IN_SECOND;

变成这个:

long millis = TimeUnit.HOURS.toMillis(hours);

如果公开了一种方法,该方法接受例如millis的某个值,然后需要对其进行转换,则最好遵循Java并发API的作用:

public void yourFancyMethod(long somePeriod, TimeUnit unit) {

int iNeedSeconds = unit.toSeconds(somePeriod);

}

如果您确实非常需要常量,则仍然可以通过调用以下命令在一个小时内获得秒数:

int secondsInHour = TimeUnit.HOURS.toSeconds(1);

theadam answered 2019-10-05T22:44:46Z

33 votes

如果在android上,我建议:

android.text.format.DateUtils

DateUtils.SECOND_IN_MILLIS

DateUtils.MINUTE_IN_MILLIS

DateUtils.HOUR_IN_MILLIS

DateUtils.DAY_IN_MILLIS

DateUtils.WEEK_IN_MILLIS

DateUtils.YEAR_IN_MILLIS

Oded Breiner answered 2019-10-05T22:45:16Z

23 votes

Java 8 / java.time解决方案

作为LocalTime的替代方法,由于某些原因,您可能更喜欢java.time包中的Duration类:

Duration.ofDays(1).getSeconds() // returns 86400;

Duration.ofMinutes(1).getSeconds(); // 60

Duration.ofHours(1).toMinutes(); // also 60

//etc.

此外,如果您更深入地分析了Duration.ofDays(..)方法的工作原理,则会看到以下代码:

return create(Math.multiplyExact(days, SECONDS_PER_DAY), 0);

其中LocalTime是LocalTime类提供的程序包保护的静态常量。

/**

* Seconds per day.

*/

static final int SECONDS_PER_DAY = SECONDS_PER_HOUR * HOURS_PER_DAY;

//there are also many others, like HOURS_PER_DAY, MINUTES_PER_HOUR, etc.

我认为可以肯定地假设,如果有任何程序包定义了“所有令人讨厌的时间常数,如毫秒/秒/分钟”,那么您相信它们会被Java SDK开发人员使用。

为什么这个LocalTime常数包受到保护,而不是公开的,这是一个好问题,我相信这是有原因的。 目前看来,您确实必须复制它们并自己维护。

Mateusz Szulc answered 2019-10-05T22:46:12Z

22 votes

Joda-Time包含诸如Days之类的类,其中包含诸如toStandardSeconds()之类的方法。 所以你可以这样写:

int seconds = Days.ONE.toStandardSeconds();

虽然看起来有些冗长,但可能仅对更复杂的情况(例如leap年)有用。

Brian Agnew answered 2019-10-05T22:43:54Z

13 votes

Java TimeUnit似乎就是您想要的

Martin answered 2019-10-05T22:46:36Z

10 votes

Joda Time还具有DateTimeConstants类,其中包含MILLIS_PER_SECOND,SECONDS_PER_MINUTE,MILLIS_PER_DAY等内容。

Lindsay Thurmond answered 2019-10-05T22:47:00Z

2 votes

尽管本答案中讨论的TimeUnit和本答案中讨论的Duration可能更直接地解决了该问题,但Java中还有一些其他方便的时间单位功能。

java.time

java.time软件包具有用于DayOfMonth和DayOfMonth的复杂枚举。因此,您可以传递完整的对象(例如DayOfMonth或DayOfYear),而不用传递数字或字符串,而无需传递任何数字或字符串。

java.time框架还包括诸如DayOfMonth、DayOfYear和AmPm之类。同样,您可以传递完整的对象,而不仅仅是数字或字符串,以使代码更具自文档性,确保有效值并提供类型安全性。 。

ThreeTen-Extra项目

ThreeTen-Extra项目提供了其他与java.time一起使用的类。 其中包括:DayOfMonth,DayOfYear,AmPm,Quarter,YearQuarter,YearWeek,Days,Weeks,Months,Years和Interval。

Basil Bourque answered 2019-10-05T22:47:57Z

2 votes

这是我用来获取毫秒数的方法。

import javax.management.timer.Timer;

Timer.ONE_HOUR

Timer.ONE_DAY

Timer.ONE_MINUTE

Timer.ONE_SECOND

Timer.ONE_WEEK

Reaz Murshed answered 2019-10-05T22:48:24Z

1 votes

已烘烤(用于多次调用)的另一种方法是Duration实例(以及0个数学运算):

ChronoUnit.DAYS.getDuration().getSeconds()

Vladislav Denisko answered 2019-10-05T22:48:52Z

0 votes

60 * 1000 miliseconds in 1 minute

60 seconds in 1 minute

1 minute in 1 minute

1/60 hours in 1 minute

1/(60*24) days in 1 minute

1/(60*24*365) years in 1 minute

1/(60*24*(365 * 4 + 1)) 4 years in 1 minute

* 60 is in 1 hour

* 60 * 24 is in 1 day

* 60 * 24 * 365 is in 1 year

etc.

我想自己创建它们是最简单的。 您可以使用Date和Calendar类对时间和日期进行计算。 使用long数据类型可处理大量数据,例如1 Januari 1970 UTC的毫秒数System.currentTimeMillis()。

Pindatjuh answered 2019-10-05T22:49:21Z

0 votes

我对此表示怀疑,因为它们不是全部常数。 一年的毫秒数不一样,对吧?

duffymo answered 2019-10-05T22:49:48Z

0 votes

如果您想获得Calendar的值,那么所有与时间管理有关的字段都可以通过一些简单的反映来完成

Field []字段= Calendar.class.getFields();

for (Field f : fields)

{

String fName = f.toString();

System.out.println(fName.substring(fName.lastIndexOf('.')+1).replace("_", " ").toLowerCase());

}

这将输出:

era

year

month

week of year

week of month

date

day of month

day of year

day of week

day of week in month

am pm

hour

hour of day

minute

second

millisecond

zone offset

dst offset

field count

sunday

monday

tuesday

wednesday

thursday

friday

saturday

january

february

march

april

may

june

july

august

september

october

november

december

undecimber

am

pm

all styles

short

long

从中可以排除不需要的内容。

如果只需要常量,则可以使用它们:Calendar.DAY_OF_MONTH、2556403555889054721等。

Jack answered 2019-10-05T22:50:42Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java,`DateTimeFormatter`是一个强大的工具,用于将日期和时间字符串转换为`LocalDateTime`、`ZonedDateTime`等对象,以及相反的操作。这里列举一些常见的`DateTimeFormatter`常量及其对应的日期格式: 1. **DateTimeFormatter.BASIC_ISO_DATE**: 这个常量表示ISO 8601基本格式的日期,即"yyyy-MM-dd"。比如,"2023-04-15"会被解析为日期2023年4月15日。 2. **DateTimeFormatter.RFC_1123_DATE_TIME**: 格式类似于 "EEE, dd MMM yyyy HH:mm:ss zzz", 用于HTTP/1.1的日期时间,例如 "Sun, 15 Apr 2023 12:30:00 GMT"。 3. **DateTimeFormatter.ISO_LOCAL_DATE**: 表示本地日期,如 "yyyy-MM-dd",但不包含时间部分。 4. **DateTimeFormatter.ISO_DATE**: 类似于ISO_LOCAL_DATE,但只包含年和月,没有日。 5. **DateTimeFormatter.ISO_LOCAL_DATE_TIME**: 包含了年、月、日、小时、分钟和秒,但没有时区信息。 6. **DateTimeFormatter.ISO_ZONED_DATE_TIME**: 适用于包含时区信息的日期时间,格式是 "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"。 7. **DateTimeFormatter.MYSQL**: MySQL数据库特定的日期时间格式,比如 "yyyy-MM-dd HH:mm:ss"。 8. **DateTimeFormatter.JODA_TIME**: Joda-Time库的日期时间格式,可能包括 "yyyy-MM-dd HH:mm:ss" 或 "yyyy-MM-dd HH:mm:ss.SSS"。 使用这些常量时,你可以直接创建一个`DateTimeFormatter`实例,并用它来解析或格式化日期字符串。例如: ```java DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE; String dateString = "2023-04-15"; LocalDate date = LocalDate.parse(dateString, formatter); ``` 如果你需要自定义格式,可以使用`DateTimeFormatter.ofPattern()`方法,传入具体的模式字符串。这样会更加灵活,但解析和生成的字符串必须遵循指定的模式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值