如何计算1个月前的毫秒?

时间:2016-11-08 11:41:12

标签: java date

我想从当前时间开始计算1个月前的毫秒数。例如,如果日期是25.11.2016,那么我想以毫秒格式获得25.10.2016。如何以毫秒计算此日期?我认为下面的代码工作不正常。

System.currentTimeMillis() - 1000*60*60*24*30 

5 个答案:

答案 0 :(得分:5)

您可以这样使用:

Calendar c = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
c.add(Calendar.MONTH, -1);
long result = c.getTimeInMillis();

请注意,System.currentTimeMillis()使用UTC,因此您需要使用相同的TimeZone创建Calendar实例。

答案 1 :(得分:3)

你可以这样做:

        Date d = new Date();
        Calendar c = new GregorianCalendar();
        c.setTime(d);
        c.add(Calendar.MONTH, -1);
        Date dOneMonthAgo = c.getTime();
        System.out.println("D: "+d+" dOneMonthAgo: "+dOneMonthAgo);
        long todayMillis = d.getTime();
        long oneMonthAgoMillis = dOneMonthAgo.getTime();

我希望这会有所帮助 安吉洛

答案 2 :(得分:2)

使用 Java 8 ,您可以:

// Get the actual date time and subtract one month
LocalDateTime ldt = LocalDateTime.now().minusMonths(1);

// LocalDateTime cannot be directly converted to millis. It has no notion of  a TimeZone, so:
ZonedDateTime zdt = ldt.atZone(ZoneId.of("America/Los_Angeles")); // Just insert the correct zone

// Now you can get the Millis:
System.out.println(zdt.toInstant().toEpochMilli());

感谢评论者@BasilBourque:

  

Java 6& 7 ThreeTen - Backport。在ThreeTenABP中进一步适用于Android。绝对值得为您添加项目和学习。

答案 3 :(得分:1)

我认为这就是你所需要的。

Calendar aMonthAgo = Calendar.getInstance();
aMonthAgo.add(Calendar.MONTH, -1);
long aMonthAgoInMS = aMonthAgo.getTime().getTime();

答案 4 :(得分:-1)

试试这个:

$this.text()