Java日期问题

Java日期问题,java,formatting,date,Java,Formatting,Date,当我将1949年之前的日期传递到下面的方法时,我对java日期有一个问题。 例如,我返回的日期是2049,我知道它与日期格式有关,我认为使用yyyy而不是RRRR可以解决这个问题。但是我不明白为什么或者如何去爱它。任何帮助都将非常感激 public static java.sql.Date parseDate(String date) throws ParseException { if (date != null) { SimpleDateFormat dateFormat = ne

当我将1949年之前的日期传递到下面的方法时,我对java日期有一个问题。 例如,我返回的日期是2049,我知道它与日期格式有关,我认为使用yyyy而不是RRRR可以解决这个问题。但是我不明白为什么或者如何去爱它。任何帮助都将非常感激

public static java.sql.Date parseDate(String date) throws ParseException {
  if (date != null) {
   SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy");
   return new java.sql.Date(dateFormat.parse(date).getTime());
  }
  return null;
 }

谢谢Jon,让我为你格式化一下

public static java.sql.Date parseDate(String date) throws ParseException {
    if (date != null) { 
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy"); 
        return new java.sql.Date(dateFormat.parse(date).getTime()); 
    } 
    return null; 
}
我怀疑这就是你想要的

private Date convertDate() throws ParseException
{
    String dateStr = "21-02-2010";
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
    Date date = null;
    if (dateStr != null)
    {
      date = new Date(dateFormat.parse(dateStr).getTime());
    }

    System.out.println(date);
    return date;
}
2010年2月21日,您将获得。。。 太阳2010年2月21日00:00:00 GMT

1938年2月21日,您将获得。。。 1938年2月21日星期一00:00:00 GMT

这有用吗?我可能是因为您的代码中有MMM。

tl;博士 时区 您的代码忽略了时区这一关键问题。确定日期需要时区。在任何一个特定的时刻,世界各地的日期都因地区而异

您的代码使用始终以UTC为单位的日期。因此,从错误命名的
date
类生成的日期值对于UTC是准确的,但对于其他时区(如
美洲/蒙特利尔
亚洲/加尔各答
)无效

使用java.time 完成这项工作的现代方法是使用java.time类来取代麻烦的旧遗留日期时间类

该类表示一个仅限日期的值,不包含一天中的时间和时区

要解析传入字符串,请使用
DateTimeFormatter
定义格式模式。为翻译月份名称时使用的人类语言指定
区域设置

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MMM-uuuu" , Locale.US );
LocalDate localDate = LocalDate.parse( "12-Jan-2017" , f );
使用JDBC4.2及更高版本,您可以使用
setObject
getObject
方法将
LocalDate
直接传递到数据库

对于尚未更新的JDBC驱动程序,请返回java.sql类型

java.sql.Date sqlDate = java.sql.Date.valueOf( localDate );
LocalDate localDate = sqlDate.toLocalDate();

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • 后来
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)

该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如、、和。

字符串日期是什么样子的?注释:1)您应该使用
java.util.Date
而不是
java.sql.Date
。2) 您应该使用Joda Time而不是
java.util.Date
“我对java Date有问题”-没关系,每个人都有
java.sql.Date sqlDate = java.sql.Date.valueOf( localDate );
LocalDate localDate = sqlDate.toLocalDate();