当前位置: 首页 > 知识库问答 >
问题:

如何将日期从一种格式转换为另一种格式的date对象,而不使用任何不推荐使用的类?

闻人鸿文
2023-03-14

我想将日期1格式的日期转换成日期2格式的日期对象。

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMMM dd, yyyy");
    SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyyMMdd");
    Calendar cal = Calendar.getInstance();
    cal.set(2012, 8, 21);
    Date date = cal.getTime();
    Date date1 = simpleDateFormat.parse(date);
    Date date2 = simpleDateFormat.parse(date1);
    println date1
    println date2

共有3个答案

何晗昱
2023-03-14

从Java 8开始,我们可以如下实现这一点:

private static String convertDate(String strDate) 
{
    //for strdate = 2017 July 25

    DateTimeFormatter f = new DateTimeFormatterBuilder().appendPattern("yyyy MMMM dd")
                                        .toFormatter();

    LocalDate parsedDate = LocalDate.parse(strDate, f);
    DateTimeFormatter f2 = DateTimeFormatter.ofPattern("MM/d/yyyy");

    String newDate = parsedDate.format(f2);

    return newDate;
}

输出将是 : “07/25/2017”

万浩淼
2023-03-14
LocalDate.parse( 
    "January 08, 2017" , 
    DateTimeFormatter.ofPattern( "MMMM dd, uuuu" , Locale.US ) 
).format( DateTimeFormatter.BASIC_ISO_DATE ) 

问题和其他答案使用麻烦的旧日期时间类,现在是遗留的,被java.time类取代。

您有仅限日期的值,因此使用仅限日期的类。LocalDate类表示没有一天中的时间和时区的仅限日期值。

String input = "January 08, 2017";
Locale l = Locale.US ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMMM dd, uuuu" , l );
LocalDate ld = LocalDate.parse( input , f );

你想要的输出格式是由ISO 8601标准定义的。对于仅包含日期的值,“扩展”格式为YYYY-MM-DD,如< code>2017-01-08,而最大限度减少分隔符使用的“基本”格式为YYYYMMDD,如< code>20170108。

为了可读性,我强烈建议使用扩展格式。但是,如果您坚持使用基本格式,该格式化程序将被预定义为名为< code>BASIC_ISO_DATE的< code>DateTimeFormatter类中的一个常量。

String output = ld.format( DateTimeFormatter.BASIC_ISO_DATE );

请在IdeOne.com上查看此代码运行。

ld.toString(): 2017-01-08

产量:20170108

java.time框架内置于Java 8和更高版本中。这些类取代了麻烦的旧式日期-时间类,如< code>java.util.Date、< code>Calendar,

若要了解详细信息,请参阅 Oracle 教程。搜索堆栈溢出以获取许多示例和说明。规格是 JSR 310。

现在处于维护模式的Joda-Time项目建议迁移到java.time类。

您可以直接与数据库交换 java.time 对象。使用符合 JDBC 4.2 或更高版本的 JDBC 驱动程序。不需要字符串,不需要 java.sql.* 类。Hibernate 5

从何处获取时间类?

  • Java SE 8、Java SE 9、Java SE 10、Java SE 11 及更高版本 - 标准 Java API 的一部分,带有捆绑实现。
    • Java 9带来了一些小功能和修复。
    • 大多数java.time功能被反向移植到Java6
    • 更高版本的Android(26)捆绑了java的实现。上课时间到了
    • 对于早期的Android(

曾景龙
2023-03-14

使用SimpleDataFormat#格式

DateFormat originalFormat = new SimpleDateFormat("MMMM dd, yyyy", Locale.ENGLISH);
DateFormat targetFormat = new SimpleDateFormat("yyyyMMdd");
Date date = originalFormat.parse("August 21, 2012");
String formattedDate = targetFormat.format(date);  // 20120821

还请注意,parse接受一个字符串,而不是一个已经解析日期对象。

 类似资料:
  • 问题内容: 我正在寻找使用SQL将一种日期格式转换为另一种格式。我正在使用用于SQLite的数据库浏览器,日期存储在“ TEXT”类型的列中。 这是当前格式的2个示例: 2017/4/17上午9:09:09 2017/10/4下午10:21:13 请注意,在当前的日期,月份和小时格式中,如果只有一位数字,则当前不会以前导“ 0”填充。他们也把月份放在第一位,然后是日期,然后是年份。这两个示例应转换

  • 我有一个输入日期作为字符串,格式为dd/MM/yyyy 现在我想把它转换成日期对象,格式为yyyy-MM-dd 目前我正在做 输入为:“2013年4月2日” 但我的约会对象是… 所需输出为:2013-02-04(不是字符串,而是日期对象)

  • 问题内容: 有没有一种简单的方法可以将一种日期格式转换为PHP中的另一种日期格式? 我有这个: 但是我当然希望它返回一个当前日期,而不是返回“黎明”。我究竟做错了什么? 问题答案: 第二个参数必须是正确的时间戳(自1970年1月1日以来的秒数)。您正在传递一个字符串,date()无法识别。 您可以使用 strtotime() 将日期字符串转换为时间戳。但是,即使strtotime()也无法识别格式

  • 问题内容: 我只是在自己学习熊猫,而遇到的问题很少。 在从csv文件读取的DataFrame中,我有一列包含日期数据,该日期数据具有不同的格式(例如和,可能为空白。),并且我想统一此列的格式。但是我不知道是否还有其他格式。因此,当我使用时,它会引发一些错误,例如格式不匹配以及数据不符合时间要求。如何统一此列的格式? 我已经将该列的一部分转换为datetime dtype,它的格式是。我可以保留da

  • 问题内容: 我在MySQL中有专栏。 如何使用PHP 将其转换为 mm / dd / yy H:M(AM / PM)显示 ? 问题答案: 要将从MySQL检索的日期转换为请求的格式(): 请参考PHP日期格式选项以调整格式。

  • 如何在本地日期中设置上述日期的格式,键入格式为dd MM yyyy。但您可以使用字符串日期模式,即dd-MM-yyyy。输出应仅为本地日期类型。