我是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”格式?
答案 0 :(得分:1)
@PropertyName("Serial Number")
private String serialNumber;
@PropertyName("Serial Number")
public String getSerialNumber() {
return serialNumber;
}
@PropertyName("Serial Number")
public void setSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
}
请参阅此code run live at IdeOne.com。
Jan
现代方法使用 java.time 类取代了可怕的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`.
/ Date
/ Calendar
类。
提示:在将日期时间值作为文本交换时,请使用ISO 8601标准格式,而不要使用要呈现给人类的文本。对于仅日期的值,应为YYYY-MM-DD,例如2018-01-23。
SimpleDateFormat
LocalDate
类表示没有日期和时区的仅日期值。
LocalDate
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
LocalDate ld = LocalDate.parse( "23/01/2018" , f ) ;
枚举将月份作为Month
枚举对象检索。
Month
询问Month m = ld.getMonth() ;
枚举以生成带有月名称文本的Month
。 String
方法可以自动为您本地化。要本地化,请指定:
TextStyle
确定字符串应为多长或缩写。请注意,在某些语言中,您可能需要根据打算使用结果的上下文来选择独立样式。Locale
确定:
代码:
getDisplayName
请注意,我们没有使用整数来表示月份。相反,使用枚举对象可以使我们的代码更具自说明性,可以确保有效值并提供type-safety。
因此,我强烈建议传递String output = m.getDisplayName( TextStyle.SHORT , Locale.US ) ;
个对象而不是仅仅Month
个整数。但是,如果您坚持要打,请致电Month.getMonthValue()
以获取电话号码。与传统类不同,编号是理智的,1月至12月为1-12。
int
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。不需要字符串,不需要int monthNumber = ld.getMonthValue() ;
类。
在哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如Interval
,YearWeek
,YearQuarter
和more。
答案 1 :(得分:0)
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd/MM/uuuu");
String dateStringFromInput = "29/08/2018";
LocalDate purchasedate = LocalDate.parse(dateStringFromInput, dateFormatter);
int monthNumber = purchasedate.getMonthValue();
System.out.println("Month number is " + monthNumber);
运行上面的代码片段将给出以下输出:
月数是8
请注意,与Calendar
LocalDate
相反,数字与人类一样,8月是8月。但是,如果要将月份格式化为标准的三字母缩写,则不需要数字首先:
Locale irish = Locale.forLanguageTag("ga");
DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("MMM", irish);
String formattedMonth = purchasedate.format(monthFormatter);
System.out.println("Formatted month: " + formattedMonth);
格式化月份:Lún
请提供您想要的放置爱尔兰/盖尔语的语言环境。 Java知道多种语言中的月份缩写。
除了使用过时的日期和时间类SimpleDateFormat
,Date
和Calendar
以外,格式模式字母区分大小写(现代DateTimeFormatter
确实如此)太)。要解析或格式化一个月,您需要使用大写的M
(您在标题中正确执行了此操作)。小写m
表示每小时的分钟。 SimpleDateFormat
在这里很麻烦(通常是很麻烦的):与其通过异常告诉您出了什么问题,它默认将月份默认为一月。哪个Calendar
会以0个月返回给您,因为它不自然地将0到11的月份进行了编号。
答案 2 :(得分:0)
简单的方法是
Calendar cal = Calendar.getInstance();
Date d = cal.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("MMM");
System.out.println(sdf.format(d));
根据您的情况,如下修改代码段:
SimpleDateFormat sf = new SimpleDateFormat("dd/mm/yyyy");
Date purchasedate;
try {
String details = input.get(i);
String[] detailsarr = details.split(",");
purchasedate = sf.parse(detailsarr[1]);
SimpleDateFormat sdf = new SimpleDateFormat("MMM");
String month = sdf.format(purchasedate);
}