Java 日期问题

问题描述 投票:0回答:5

我正在使用 GregorianCalander,当我尝试使用以下代码获取今天的日期时,我得到的日期可以追溯到一个月。我使用的代码如下。

        Calendar gcal = new GregorianCalendar();
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        today = getTime(gcal);
        //date = dateFormat.format(calendar.getTime());
        System.out.println("Today: " + today);

请帮我解决这个问题。

输出是:

今天:4 月 28 日星期四 00:00:00 NZST 2011

编辑

private Date getTime(Calendar gcal) {
    try {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        String day = form_helper.round(gcal.get(GregorianCalendar.DAY_OF_MONTH));
        String month = form_helper.round(gcal.get(GregorianCalendar.MONTH));
        String year = form_helper.round(gcal.get(GregorianCalendar.YEAR));
        String date = day + "/" + month + "/" + year;
        System.out.println(sdf.parse(date));
        return sdf.parse(date);
    } catch (ParseException ex) {
        Logger.getLogger(timesheet_utility.class.getName()).log(Level.SEVERE, null, ex);
    }
    return null;
}
java date
5个回答
5
投票

我认为月份的内部编号从 0 开始,而不是 1。所以,您可能需要在某个地方添加 +1。
编辑:在显示更多代码后:需要的更改是

String month = form_helper.round(gcal.get(GregorianCalendar.MONTH) + 1);

4
投票

getTime()
方法有什么作用?请记住,在 Java 中,月份常量从 0 开始,而不是从 1 开始,所以
Calendar.JANUARY == 0

编辑

自从您发布了

getTime()
的代码以来,我认为这就是问题所在:

gcal.get(GregorianCalendar.MONTH)
返回 Java 内部存储的月份值,即 0 索引的月份值,因此“May”的值实际上是整数“4”。

当值“4”被放回日期解析器时,结果是“四月”,因为解析器像人类一样解释日期。因此,您只需将此值加 1 即可确保解析正确进行。


3
投票

如果您想要一个代表今天 12:00AM(或 00:00)的

Date
对象,为什么不这样做:

private Date getTime() {
    Calendar gcal = new GregorianCalendar();
    gcal.set(Calendar.HOUR_OF_DAY, 0);
    gcal.set(Calendar.MINUTE, 0);
    gcal.set(Calendar.SECOND, 0);
    gcal.set(Calender.MILLISECOND, 0);
    return gcal.getTime();
}

2
投票

这是我的尝试:

package forums;
import java.util.Date;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class Deepak
{
  public static void main(String[] args) {
    try {
      (new Deepak()).run();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  public void run() {
    Calendar calendar = new GregorianCalendar();
    Date today = calendar.getTime();
    System.out.println("Today: " + today);
  }

}

输出是预期的:

 Today: Sat May 28 22:00:52 EST 2011

0
投票

避免遗留日期时间类

存在严重缺陷的

Calendar
GregorianCalendar
类现在已成为遗留物,多年前已被 JSR 310 中定义的现代 java.time 类取代。

LocalDate

对于仅日期值,请使用

LocalDate
类。

要捕获当前日期,请指定时区。对于任何给定时刻,全球各地的日期因时区而异。它可以是日本东京的“明天”,同时也可以是美国俄亥俄州托莱多的“昨天”。

ZoneId z = ZoneId.of( "America/Edmonton" ) ; // Or `ZoneId.systemDefault`. LocalDate today = LocalDate.now( z ) ;
    
© www.soinside.com 2019 - 2024. All rights reserved.