【问题标题】:Get day, month and year separately using SimpleDateFormat使用 SimpleDateFormat 分别获取日、月和年
【发布时间】:2014-05-24 06:23:12
【问题描述】:

我有一个这样的SimleDateFormat

SimpleDateFormat format = new SimpleDateFormat("MMM dd,yyyy  hh:mm");
String date = format.format(Date.parse(payback.creationDate.date));

我用"Jan,23,2014"这样的格式给出日期。

现在,我想分别获取日、月和年。我该如何实现?

【问题讨论】:

  • 您当前的实施是否有效?
  • 是的,这两行工作正常
  • 您想将日、月和年作为单独的输出吗?
  • 您的格式模式与您的示例输入数据字符串不匹配。
  • 仅供参考,非常麻烦的旧日期时间类,如 java.util.Datejava.util.Calendarjava.text.SimpleDateFormat 现在是 legacy,被 Java 8 中内置的 java.time 类所取代,之后。见Tutorial by Oracle

标签: java android date simpledateformat


【解决方案1】:

如果需要单独获取值,则使用多个SimpleDateFormat

SimpleDateFormat dayFormat = new SimpleDateFormat("dd");
String day = dayFormat.format(Date.parse(payback.creationDate.date));

SimpleDateFormat monthFormat = new SimpleDateFormat("MM");
String month = monthFormat .format(Date.parse(payback.creationDate.date));

等等

【讨论】:

  • 是的,兄弟,我想告诉你。对我来说很好。谢谢
  • 注意 Date.parse() 已被@deprecated,根据 API,建议使用 DateFormat.parse
  • 是的,Date.parse() 已被弃用,所以最好使用 stackoverflow.com/a/12042621/2914140 之类的东西。
  • 使用applyPattern可以避免多个SimpleDateFormat
  • 这里的“回报”是做什么的,从哪里来的?
【解决方案2】:
    SimpleDateFormat format = new SimpleDateFormat("MMM dd,yyyy  hh:mm", Locale.ENGLISH);

    Date theDate = format.parse("JAN 13,2014  09:15");

    Calendar myCal = new GregorianCalendar();
    myCal.setTime(theDate);

    System.out.println("Day: " + myCal.get(Calendar.DAY_OF_MONTH));
    System.out.println("Month: " + myCal.get(Calendar.MONTH) + 1);
    System.out.println("Year: " + myCal.get(Calendar.YEAR));

【讨论】:

    【解决方案3】:

    哇,SimpleDateFormat 获取字符串部分?如果您的输入字符串类似于“Jan,23,2014”,则可以轻松解决:

    String input = "Jan,23,2014";
    String[] out = input.split(",");
    System.out.println("Year = " + out[2]);
    System.out.println("Month = " + out[0]);
    System.out.println("Day = " + out[1]);
    

    输出:

    Year = 2014
    Month = Jan
    Day = 23
    

    但如果你真的因为某些原因想使用SimpleDateFormat,解决方法如下:

    String input = "Jan,23,2014";
    SimpleDateFormat format = new SimpleDateFormat("MMM,dd,yyyy");
    Date date = format.parse(input);
    Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
    calendar.setTime(date);
    System.out.println(calendar.get(Calendar.YEAR));
    System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
    System.out.println(new SimpleDateFormat("MMM").format(calendar.getTime()));
    

    输出:

    2014
    23
    Jan
    

    【讨论】:

      【解决方案4】:

      此处接受的答案建议使用多个SimpleDateFormat,但可以使用一个SimpleDateFormat 实例并调用applyPattern

      注意:我相信这篇文章对那些像我一样正在搜索 setPattern() 的人也有帮助。

      Date date=new Date();
      SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
      simpleDateFormat.applyPattern("dd");
      System.out.println("Day   : " + simpleDateFormat.format(date));
      simpleDateFormat.applyPattern("MMM");
      System.out.println("Month : " + simpleDateFormat.format(date));
      simpleDateFormat.applyPattern("yyyy");
      System.out.println("Year  : " + simpleDateFormat.format(date));
      

      【讨论】:

        【解决方案5】:

        tl;博士

        使用LocalDate 类。

        LocalDate
        .parse(
            "Jan,23,2014" , 
            DateTimeFormatter.ofPattern( "MMM,dd,uuuu" , Locale.US )
        )
        .getYear()
        

        … 或.getMonthValue().getDayOfMonth

        java.time

        其他答案使用过时的类。 java.time 类取代了那些麻烦的旧遗留类。

        LocalDate

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

        String input = "Jan,23,2014";
        DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMM,d,uuuu" );
        LocalDate ld = LocalDate.parse( input , f );
        

        查询你想要的部分。

        int year = ld.getYear();
        int month = ld.getMonthValue();
        int dayOfMonth = ld.getDayOfMonth();
        

        关于java.time

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

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

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

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

        从哪里获得 java.time 类?

        ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

        【讨论】:

          【解决方案6】:

          使用它来解析“Jan,23,2014”

          SimpleDateFormat fmt = new SimpleDateFormat("MMM','dd','yyyy"); 
          Date dt = fmt.parse("Jan,23,2014");
          

          那么你可以得到日期的任何部分。

          【讨论】:

            【解决方案7】:

            你接受了吗?

            int day = 25 ; //25
            int month =12; //12
            int year = 1988; // 1988
            Calendar c = Calendar.getInstance();
            c.set(year, month-1, day, 0, 0);    
            SimpleDateFormat format =   new SimpleDateFormat("MMM dd,yyyy  hh:mm");
            System.out.println(format.format(c.getTime()));
            

            显示为Dec 25,1988 12:00

            更新:基于评论

            DateFormat format =   new SimpleDateFormat("MMM");
            System.out.println(format.format(format.parse("Jan,23,2014")));
            

            注意:Date.parse() 已被@deprecated,根据 API,建议使用 DateFormat.parse

            【讨论】:

            • 我只想在我的代码中获取日期格式的 day 或 mounth。未完成日期。
            【解决方案8】:
            public static String getDate(long milliSeconds, String dateFormat) {
                    // Create a DateFormatter object for displaying date in specified
                    // format.
                    SimpleDateFormat formatter = new SimpleDateFormat(dateFormat,
                            Locale.getDefault());
            
                    // Create a calendar object that will convert the date and time value in
                    // milliseconds to date.
                    Calendar calendar = Calendar.getInstance();
                    calendar.setTimeInMillis(milliSeconds);
                    return formatter.format(calendar.getTime());
                }
            

            【讨论】:

            • -1 这没有解决问题。就是一堆日期格式相关的代码。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多