我试图将几个月的时间转换为毫秒
例如: 6个月= X毫秒
答案 0 :(得分:8)
对此没有固定的答案,因为这取决于那些月份 - 实际上是哪一年。如果您想考虑到这一点,也可能是您所在的时区。 (顺便说一句,我假设你的意思是阳历,不同的日历系统有不同的月份长度。)
你可以通过假设一年365.25天获得某种“合理的近似”,并说6个月是其中的一半,然后发现那么多天以毫秒为单位。但 只是近似值。
对于“从日期/时间X到6个月后需要多少毫秒”,您使用API(即使Calendar
也适用于此特定情况,但我建议使用{{ Java 8中的3}}或java.time
:
答案 1 :(得分:5)
如果您确切知道这些6个月何时到达,您可以使用java.util.Calendar
,JodaTime或JDK1.8时间API以各种方式计算持续时间。
但是如果您没有特定的日期,您可以采取一个月的平均持续时间。 世界上没有任何API可以改变这一事实。
例如,JDK1.8时间API在一个月的持续时间内使用它:秒(来自java.time.temporal.ChronoUnit
)
MONTHS("Months", Duration.ofSeconds(31556952L / 12)),
31,556,952
是一年中的秒数,基于持续365.2425
天的年份。
您可以直接使用相同的数字,并获得与时间API相同的结果:
long months = 6;
long seconds = months * 31556952L / 12;
long milliseconds = seconds * 1000;
结果:
15,778,476,000
答案 2 :(得分:2)
Calendar today = Calendar.getInstance();
Calendar sixMonthsAhead = Calendar.getInstance();
sixMonthsAhead.add(Calendar.MONTH, 6);
long differenceInMilis = sixMonthsAhead.getTimeInMillis() - today.getTimeInMillis();
你也可以使用......
sixMonthsAhead.add(Calendar.DATE, 180);
// or 183 days because 365 / 2 is approximately 183.
而不是......
sixMonthsAhead.add(Calendar.MONTH, 6);
获得更准确的结果。但就像乔恩提到的那样,它总是会根据一年中的哪一天而变化。
答案 3 :(得分:0)
answer by Jon Skeet是正确的。
假设您可以在时间线上指定一对起点和终点,下面是一些使用Joda-Time 2.3库的示例代码。
此代码抓取当前时刻,调整到当月的第一个,并调整到当天的第一个时刻。然后它增加了6个月。考虑到闰年和不同长度的月份,Joda-Time很聪明地增加了几个月。然后将6个月的跨度表示为Interval
实例。由此我们计算毫秒数。请注意,毫秒数需要是long
(64位),而不是Java程序员更常用的int
(32位)。最后,为了好玩,我们会看到在ISO 8601 standard’s "Duration" format格式化时的这段时间。
DateTimeZone dateTimeZone = DateTimeZone.forID( "Europe/Paris" ); // Better to specify a time zone than rely on JVM’s default.
DateTime start = new DateTime( dateTimeZone ).withDayOfMonth( 1 ).withTimeAtStartOfDay();
DateTime stop = start.plusMonths( 6 );
Interval interval = new Interval( start, stop );
long milliseconds = interval.toDurationMillis(); // A long, not an int.
Period period = interval.toPeriod(); // For fun… ISO 8601 standard's Duration format.
转储到控制台...
System.out.println("start: " + start );
System.out.println("stop: " + stop );
System.out.println("interval: " + interval );
System.out.println("milliseconds: " + milliseconds );
System.out.println("period: " + period );
跑步时......
start: 2014-04-01T00:00:00.000+02:00
stop: 2014-10-01T00:00:00.000+02:00
interval: 2014-04-01T00:00:00.000+02:00/2014-10-01T00:00:00.000+02:00
milliseconds: 15811200000
period: P6M