Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java日期格式转换-月份出错_Java_Date - Fatal编程技术网

Java日期格式转换-月份出错

Java日期格式转换-月份出错,java,date,Java,Date,我在用java转换日期时遇到问题,不知道哪里出错了 String dateStr = "2011-12-15"; String fromFormat = "yyyy-mm-dd"; String toFormat = "dd MMMM yyyy"; try { DateFormat fromFormatter = new SimpleDateFormat(fromFormat); Date date = (Date) fromFo

我在用java转换日期时遇到问题,不知道哪里出错了

    String dateStr = "2011-12-15";
    String fromFormat = "yyyy-mm-dd";
    String toFormat = "dd MMMM yyyy";

    try {
        DateFormat fromFormatter = new SimpleDateFormat(fromFormat);
        Date date = (Date) fromFormatter.parse(dateStr);

        DateFormat toformatter = new SimpleDateFormat(toFormat);
        String result = toformatter.format(date);

    } catch (ParseException e) {
        e.printStackTrace();
    }
输入日期是2011-12-15,我希望结果是“2011年12月15日”,但我得到的结果是“2011年1月15日”


我哪里做错了

您的
fromFormat
在应该使用月份的地方使用分钟

String fromFormat = "yyyy-MM-dd";

您的
fromFormat
使用分钟,而它应该使用月份

String fromFormat = "yyyy-MM-dd";

我认为格式的应该是“yyyy-MM-dd”

格式如下:

  • m==以小时为单位的分钟
  • M==一年中的月份

更多信息:

我认为格式的应该是“yyyy-MM-dd”

格式如下:

  • m==以小时为单位的分钟
  • M==一年中的月份

更多信息:

看看的javadoc,看看
m
代表什么。不是你想象的几个月而是几分钟。

看看的javadoc,看看
m
代表什么。不是你想象中的月,而是分钟。
SimpleDateFormat
中的m代表分钟,而
m
代表月。因此,您的第一种格式应该是
yyyy-MM-dd
m
,在
SimpleDateFormat
中代表分钟,而
m
代表月份。因此,您的第一种格式应该是
yyyy-MM-dd

格式应该是:

 String fromFormat = "yyyy-MM-dd"; 
String fromFormat = "yyyy-MM-dd"
格式应为:

String fromFormat = "yyyy-MM-dd"
tl;博士 2011年12月15日

java.time 虽然正确(大写
MM
表示月份),但现在有了更好的方法。麻烦的旧日期时间类现在是遗留的,被java.time类取代

您的输入字符串是标准格式的。因此,无需为解析指定格式模式

LocalDate ld = LocalDate.parse( "2011-12-15" );  // Parses standard ISO 8601 format by default.
Locale l = new Locale( "en" , "IN" ) ;  // English in India.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.LONG )
                                       .withLocale( l );
String output = ld.format( f );
转储到控制台

System.out.println( "ld.toString(): " + ld );
System.out.println( "output: " + output );
ld.toString():2011-12-15

产出:2011年12月15日


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

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

从哪里获得java.time类

  • 然后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类
    • 对于早期的Android(tl;dr 2011年12月15日

      java.time 虽然正确(大写
      MM
      表示月份),但现在有了更好的方法。麻烦的旧日期时间类现在是遗留的,被java.time类取代

      您的输入字符串是标准格式的。因此无需为解析指定格式模式

      LocalDate ld = LocalDate.parse( "2011-12-15" );  // Parses standard ISO 8601 format by default.
      Locale l = new Locale( "en" , "IN" ) ;  // English in India.
      DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.LONG )
                                             .withLocale( l );
      String output = ld.format( f );
      
      转储到控制台

      System.out.println( "ld.toString(): " + ld );
      System.out.println( "output: " + output );
      
      ld.toString():2011-12-15

      产出:2011年12月15日


      关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&

      该项目现已启动,建议迁移到类

      要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为

      您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
      java.sql.*
      classes

      从哪里获得java.time类

      • 然后
        • 内置的
        • 标准JavaAPI的一部分,带有捆绑实现
        • Java9添加了一些次要功能和修复
        • 大部分java.time功能都在中向后移植到Java6和Java7
        • 更高版本的Android捆绑包实现了java.time类

        • 对于早期的Android(好吧,这可能不是你的情况,但可能会帮助某些人。在我的情况下,转换后,月日和月设置为1。因此,无论日期是什么,转换后我得到1月1日,这是错误的。
          经过努力,我发现在日期格式中,我使用了
          YYYY
          而不是
          yyy
          。当我将所有大写字母Y改为Y时,效果很好。

          这可能不是你的情况,但可能会对某人有所帮助。在我的情况下,转换后的月份和月份的日期设置为1。因此,无论转换后的日期是什么,我都会得到1,这是错误的。
          经过努力,我发现在日期格式中,我使用了
          YYYY
          而不是
          YYYY
          。当我将所有大写字母Y改为Y时,效果很好。

          我喜欢的一件事是问题回答得这么快。当我键入答案时,一分钟内有3个新答案,太棒了!我喜欢的一件事是问题回答得这么快当我输入答案时,在一分钟内有3个新答案,太棒了!