如何在java中选择上个月的最后一个时间戳?

时间:2015-08-31 08:16:41

标签: java

从下面的java代码中我得到了一个月的第一个&最后一个dateTimestamp,但在这里我需要最后一个dateTimestamp作为 - “Mon Aug 31 23:59:59 IST 2015”而不是 - “Mon Aug 31 00:00:00 IST 2015”?

        Calendar cal = Calendar.getInstance();
        int year = 2015;
        int month = 07;
        cal.set(cal.DATE,1);
        cal.set(cal.YEAR,year);
        cal.set(cal.MONTH, month);
        String firstDate = (cal.getActualMinimum(cal.DATE) + "/" + (month+1) + "/" +year);
        System.out.println("firstDate-->"+"\t"+firstDate);
        String lastDate = (cal.getActualMaximum(cal.DATE) + "/" + (month+1) + "/" +year);
        System.out.println("lastDate-->"+"\t"+lastDate);
        DateFormat firstFormat = new SimpleDateFormat("dd/MM/yyyy");
        Date beginDate = firstFormat.parse(firstDate);
        System.out.println("BeginDate Timestamp"+ "\t" + beginDate);
        DateFormat secoundFormat = new SimpleDateFormat("dd/MM/yyyy");
        Date endDate = secoundFormat.parse(lastDate);
        System.out.println("endDate Timestamp"+ "\t" + endDate);

输出: - >

firstDate-->    1/8/2015
lastDate-->    31/8/2015
BeginDate Timestamp Sat Aug 01 00:00:00 IST 2015
endDate Timestamp   Mon Aug 31 00:00:00 IST 2015

如果我们有任何解决方案,请帮助我。

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,看起来好像你想把一年和一个月传递给一个方法,并回到过去一个月的最后一天。

我建议考虑(按此顺序):

  1. 你使用哪个jdk
  2. 日历配置
  3. 时区配置(可能)
  4. 使用jodatime
  5. 从1.8开始,许多类似JodaTime的功能被添加到jdk中,例如看https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html(如果你不使用1.8,你可以使用joda lib,假设你的组织允许它)

    Calendar.getInstance()提供默认的TimeZone和默认的Locale,这意味着正在运行的JVM的定义。您可能需要或可能不需要考虑这一点并实现不仅仅是getInstance()。请参阅API javadoc。

    假设一个Gregeorian日历(嘿,你可能是Bahaian,一年有19个月......),这里有一个部分实现使用JDK 1.7,JodaTime jar 2.2,validation-1.0。 0.GA jar:

    @Test
    public void testDate() {
    
        final String dateStringOfFirstDay = "1.7.2015";
        final Date lastDayOfMonth = getLastDayOfMonth(dateStringOfFirstDay);
        Assert.assertNotNull(lastDayOfMonth);
        //more assertions ...
    }
    
    private Date getLastDayOfMonth(@NotNull String dateStringOfFirstDay) {
    
        //further validation here necessary according to required date format 
        DateTime dt = DateTime.parse(dateStringOfFirstDay);
        return dt.dayOfMonth().withMaximumValue().toDate();
    }
    

    DateFormat / DateTimeFormat的定义以及进一步的结果断言由你决定。

    祝你好运!

答案 1 :(得分:0)

伙计我为我的问题找到了解决方案! 我想它也会对你有所帮助......

Calendar calendar = Calendar.getInstance();
        int year=2015;
        int month=7;
        int date=31;
        int hourOfDay=23;
        int minute=59;
        int second=59;
        int milliSecond=999;
        calendar.set(year, month, date, hourOfDay, minute, second);
        calendar.set(calendar.MILLISECOND, milliSecond);
        System.out.println("Time from Calendar: "+calendar.getTime());
        long timeInMilliSeconds=calendar.getTimeInMillis();
        System.out.println("timeInMilliSeconds from calendar: "+timeInMilliSeconds);
        Timestamp timestamp=new Timestamp(timeInMilliSeconds);
        System.out.println(timestamp);

上述程序给出了所选月份中最后一个日期的上一个时间戳。 getTimeInMillis()从1970年1月1日到以毫秒为单位的当前时间。 使用这些毫秒我得到时间戳。 谢谢你的帮助!

输出: - >

Time from Calendar: Mon Aug 31 23:59:59 IST 2015
timeInMilliSeconds from calendar: 1441045799999
2015-08-31 23:59:59.999