gpt4 book ai didi

java - 如何从给定日期获取整数月份并打印为月份名称格式 ("MMM")

转载 作者:行者123 更新时间:2023-12-02 10:48:40 26 4
gpt4 key购买 nike

我是 Java 新手,在使用下面的代码时无法检索月份,而是将月份值设置为 0。请指出我在这里犯的错误。

*

for(int i=0;i<this.input.size();i++)
{
SimpleDateFormat sf = new SimpleDateFormat("dd/mm/yyyy");

Date purchasedate;
try {
String details = input.get(i);
String[] detailsarr = details.split(",");
purchasedate = sf.parse(detailsarr[1]);
Calendar cal = Calendar.getInstance();
cal.setTime(purchasedate);
int month = cal.get(Calendar.MONTH);

*将上述月份作为整数获取后,请问是否可以将上述月份值打印为“MMM”格式?

最佳答案

tl;博士

LocalDate.parse(          // Represent a date-only value, without time-of-day and without time zone.
"23/01/2018" , // Tip: Use standard ISO 8601 formats rather than this localized format for data-exchange of date-time values.
DateTimeFormatter.ofPattern( "dd/MM/uuuu" )
) // Return a `LocalDate` object.
.getMonth() // Return a `Month` enum object representing the month of this date.
.getDisplayName( // Automatically localize, generating text of the name of this month.
TextStyle.SHORT , // Specify (a) how long or abbreviated, and (b) specify whether used in stand-alone or combo context linguistically (irrelevant in English).
Locale.US // Specify the human language and cultural norms to use in translation.
) // Returns a `String`.

查看此code run live at IdeOne.com .

Jan

java.time

现代方法使用java.time类来取代可怕的Date/Calendar/SimpleDateFormat类.

ISO 8601

提示:将日期时间值交换为文本时,请使用 ISO 8601标准格式,而不是使用用于呈现给人类的文本。对于仅日期值,这将是 YYYY-MM-DD,例如 2018-01-23。

本地日期

LocalDate类表示仅日期值,没有时间和时区。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
LocalDate ld = LocalDate.parse( "23/01/2018" , f ) ;

月份枚举

将月份检索为 Month枚举对象。

Month m = ld.getMonth() ;

本地化

要求 Month 枚举生成一个包含月份名称文本的 StringgetDisplayName 方法可以自动为您进行本地化。要本地化,请指定:

  • TextStyle确定字符串的长度或缩写。请注意,在某些语言中,您可能需要根据您打算使用结果的上下文来选择独立样式。
  • Locale确定:
    • 用于翻译日名、月名等的人类语言
    • 决定缩写、大写、标点符号、分隔符等问题的文化规范

代码:

String output = m.getDisplayName( TextStyle.SHORT , Locale.US ) ;

使用枚举,而不是整数

请注意,我们没有使用整数来表示月份。使用枚举对象使我们的代码更加自记录,确保有效值,并提供 type-safety .

因此,我强烈建议传递 Month 对象,而不仅仅是传递 int 整数。但如果您坚持,请调用Month.getMonthValue()得到一个号码。编号是合理的,1 月至 12 月为 1-12,与旧版不同。

int monthNumber = ld.getMonthValue() ;
<小时/>

关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

Joda-Time项目,现在位于 maintenance mode ,建议迁移到java.time类。

要了解更多信息,请参阅 Oracle Tutorial 。并在 Stack Overflow 上搜索许多示例和解释。规范为JSR 310 .

您可以直接与数据库交换java.time对象。使用JDBC driver符合JDBC 4.2或稍后。不需要字符串,不需要 java.sql.* 类。

从哪里获取java.time类?

ThreeTen-Extra项目通过附加类扩展了 java.time。该项目是 java.time future 可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter ,和 more .

关于java - 如何从给定日期获取整数月份并打印为月份名称格式 ("MMM"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52350667/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com