如何从给定日期获取一个整数的月并以月名称格式(“ MMM”)打印

时间:2018-09-16 03:18:07

标签: java calendar date-formatting date-parsing

我是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”格式?

3 个答案:

答案 0 :(得分:1)

tl; dr

@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

现代方法使用 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

提示:在将日期时间值作为文本交换时,请使用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() ; 枚举以生成带有月名称文本的MonthString方法可以自动为您本地化。要本地化,请指定:

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

代码:

getDisplayName

使用枚举,而不是整数

请注意,我们没有使用整数来表示月份。相反,使用枚举对象可以使我们的代码更具自说明性,可以确保有效值并提供type-safety

因此,我强烈建议传递String output = m.getDisplayName( TextStyle.SHORT , Locale.US ) ; 个对象而不是仅仅Month个整数。但是,如果您坚持要打,请致电Month.getMonthValue()以获取电话号码。与传统类不同,编号是理智的,1月至12月为1-12。

int

关于 java.time

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

目前位于Joda-Timemaintenance 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中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

答案 1 :(得分:0)

java.time

    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知道多种语言中的月份缩写。

您的代码出了什么问题?

除了使用过时的日期和时间类SimpleDateFormatDateCalendar以外,格式模式字母区分大小写(现代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);
   }