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

将日期字符串从ISO 8601格式转换为其他格式

皇甫聪
2023-03-14

我有这段代码,在这里我试图将日期字符串从一种格式转换为另一种格式,最后我想再次使用日期对象。

            String dateString = "2014-10-04";
    SimpleDateFormat oldFormatter = new SimpleDateFormat("yyyy-MM-dd");
    Date parsedDate = oldFormatter.parse(dateString);
    SimpleDateFormat newFormatter = new SimpleDateFormat("dd-MMM-yyyy");
    String convertDateStr = newFormatter.format(parsedDate);
    Date convertedDate = newFormatter.parse(convertDateStr);

共有1个答案

酆俊远
2023-03-14
LocalDate.parse(            // Represent a date-only value with a date-only class.
    "2014-10-04"            // Inputs in standard ISO 8601 format are parsed by default. No need to specify a formatting pattern.
)                           // Returns a `LocalDate` object. Do not conflate a date-time object with a String that represents its value. A `LocalDate` has no “format”.
.format(                    // Generate a String representing the `LocalDate` object’s value. 
    DateTimeFormatter.ofPattern( "dd-MMM-uuuu" , Locale.US )  // Define your custom formatting pattern. Specify `Locale` for human language and cultural norms used in localization.
)                           // Return a String.

现代方法使用java.time类,这些类取代了麻烦的旧遗留日期-时间类,如date/calendar/SimpleDateFormat

对仅限日期的值使用仅限日期的类,而不是日期+时间类。LocalDate类表示一个不包含时间和时区的只包含日期的值。

您的输入字符串碰巧符合标准ISO 8601格式。在解析/生成字符串时,java.time类默认使用ISO 8601格式。因此不需要指定格式模式。

String input  = "2014-10-04" ;
LocalDate ld = LocalDate.parse( input ) ;  // No need to specify a formatting pattern for ISO 8601 inputs.
Locale locale = Locale.US ; 
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MMM-uuuu" , locale ) ;
String output = ld.format( f ) ;
    null
    null
  • java.time类的Android bundle实现的更新版本。
  • 对于早期的Android(<26),ThreeTenABP项目适应了ThreeTen-Backport(上面提到)。查看如何使用threetenabp….

ThreeTen-Extra项目使用额外的类扩展了java.time。这个项目是将来可能添加到java.time的试验场。您可以在这里找到一些有用的类,如intervalYearWeekYearQuarter等。

 类似资料:
  • 问题内容: 我有一个包含日期格式的字符串。 您如何建议我以最佳方式将其转换为格式? 这就是我天真地做的事情: 但是还有其他更优雅,更有效的方法吗?就是 使用一些内置功能?快速搜寻API时,我找不到一个。 这里有人知道替代方法吗? 问题答案: 用途:

  • 问题内容: 我想要这种格式 问题答案: 您需要先 解析 日期字符串(使用方法),才能 使用与格式匹配的格式获取对象。 然后使用所需的格式来 格式化 Date对象(Use 方法)以获取字符串。 输出:- 第一种格式是RFC 822 TimeZone与您的日期字符串匹配。有关在日期格式中使用的其他各种选项,请参见。

  • 我得到一串零。有人能帮忙吗?

  • 我这样做是为了设置日期格式,然后将其转换为日期数据类型,但它没有给出预期的结果。 场景是:我希望将当前日期转换为年/月/日,然后在 setDOB(日期日期)中传递它。 编辑:结果添加 结果是 星期二 一月 01 00:08:00 IST 2013 伙计们!我没有使用“mm”,这里我只是在DateFormat中错误地写了mm,它也是MM 再次编辑:首先,我刚刚使用了setDOB(new Date()

  • 我在presto上,把日期格式化为varchar,看起来像- 我如何转换这个?

  • 问题内容: 我正在使用代码将字符串格式化为日期 但是,如何将日期从格式转换为格式? 问题答案: 使用SimpleDateFormat#format(Date):