Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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 将Joda Time DateTime-ISO 8601格式日期转换为其他日期格式_Java_Jodatime - Fatal编程技术网

Java 将Joda Time DateTime-ISO 8601格式日期转换为其他日期格式

Java 将Joda Time DateTime-ISO 8601格式日期转换为其他日期格式,java,jodatime,Java,Jodatime,在我的Java应用程序中,我使用它将应用程序用户输入的日期从MM/dd/yyyy转换为ISO 8601格式,以便将其保存在DB中 有人能告诉我如何使用Joda Time将日期转换回MM/dd/yyyy格式吗 我的代码将用户日期转换为ISO 8601日期格式: String date1 = "05/05/2013"; DateTimeFormatter parser1 = DateTimeFormat.forPattern("MM/dd/yyyy"); DateTime dateTimeObj1

在我的Java应用程序中,我使用它将应用程序用户输入的日期从MM/dd/yyyy转换为ISO 8601格式,以便将其保存在DB中

有人能告诉我如何使用Joda Time将日期转换回MM/dd/yyyy格式吗

我的代码将用户日期转换为ISO 8601日期格式:

String date1 = "05/05/2013";
DateTimeFormatter parser1 = DateTimeFormat.forPattern("MM/dd/yyyy");
DateTime dateTimeObj1 = DateTime.parse(date1,parser1);
DateTimeFormatter isoDateFormat = ISODateTimeFormat.dateTime();
String isoDateStr = isoDateFormat.print(dateTimeObj1);
System.out.println(isoDateStr);
使用相同的格式化程序 使用与2.3中的
print
(呈现字符串)相同的DateTimeFormatter
对象进行解析

时区 请注意,您的代码忽略了解决问题。在这种情况下,您将获得JVM的默认时区。这不是个好习惯

DateTime表示日期和时间。当只解析日期部分的字符串时,时间部分自动设置为一天中的第一个时刻。第一个时刻因时区而异。所以,应用不同的时区会产生不同的结果,宇宙时间轴上的不同点,从新纪元开始的不同毫秒

请注意定义格式化程序时对的调用

串 请记住,DateTime对象不是字符串。您可以通过以下任一方式生成DateTime中包含的日期时间信息的字符串表示形式:

  • 对DateTime实例调用
    toString
    方法。
    每个DateTime都有一个内置的,由“toString”方法自动使用
  • 实例化您自己的
    DateTimeFormatter
    实例
下面的示例代码中显示了这两种字符串生成技术

示例代码
//指定时区通常比依赖默认时区更好。
DateTimeZone timeZone=DateTimeZone.forID(“亚洲/香港”);
DateTimeFormatter formatter=DateTimeFormat.forPattern(“MM/dd/yyyy”)。带时区(时区);
//将字符串解析为日期时间。定义格式。
字符串输入=“05/05/2013”;
DateTime DateTime=formatter.parseDateTime(输入);//默认为一天中的第一个时刻。
//将日期时间呈现为ISO 8601字符串。DateTime上的“toString”方法默认为内置的ISO 8601格式化程序。
//DateTime对象本身不是字符串。但是DateTime可以通过调用其“toString”方法生成字符串。
字符串iso8601String=dateTime.toString();
//将字符串解析为日期时间。传递给构造函数使用DateTime类中内置的ISO8601解析器。
DateTime dateTime2=新的日期时间(ISO8601字符串,时区);
//以特定格式将日期时间呈现为字符串。
字符串输出=格式化程序.print(dateTime2);
您可以对本地化格式进行软编码,而不是硬编码特定格式

String outputUS = DateTimeFormat.forStyle( "S-" ).withLocale( Locale.US ).print( dateTime2 );
String outputQuébécois = DateTimeFormat.forStyle( "F-" ).withLocale( Locale.CANADA_FRENCH ).print( dateTime2 );
转储到控制台

System.out.println( "dateTime: " + dateTime ); // Implicit call to "toString" method in DateTime class generates a new string using a built-in formatter for ISO 8601 format.
System.out.println( "iso8601String: " + iso8601String );
System.out.println( "dateTime2: " + dateTime2 ); // Another implicit call to "toString" method on DateTime class. Generates a new string in ISO format.
System.out.println( "output: " + output );
当运行时

dateTime:2013-05-05T00:00:00.000+08:00
ISO8601字符串:2013-05-05T00:00:00.000+08:00
日期时间2:2013-05-05T00:00:00.000+08:00
产出:2013年5月5日
字符串不是日期时间 不要将日期时间对象视为字符串

DateTime
没有格式。该类可以解析ISO 8601格式的字符串来实例化日期时间对象。同样,
DateTimeFormatter
可以解析字符串来实例化日期时间对象

相反,一个
DateTime
有一个
toString
实现,它生成日期时间对象值的字符串表示形式。同样,
DateTimeFormatter
可以生成日期时间对象值的字符串表示形式


在所有这些情况下,字符串表示完全不同,并且与日期-时间对象分开。

是否希望在以后的阶段执行此操作,即只使用ISO格式的日期?您可以将该值解析为
DateTime
对象,并将其格式化为
MM/dd/yyyy
格式。非常感谢您的详细回答,我在这里有点困惑,在DateTime DateTime步骤中,我们已经有了从println显示的ISO8601格式的日期,那么,我们为什么要执行字符串ISO8601字符串步骤来再次检索ISO8601格式的日期呢?@MChan,因为是您要求的。我正在显示一个完整的周期:字符串(仅限日期)→ 日期时间实例→ 字符串(ISO)→ 日期时间实例→ 字符串(仅限日期)。在DateTime DateTime行中,我们没有ISO字符串。在第一行System.out.println中生成一个ISO字符串,其中隐式调用了
dateTime
对象上的
toString
方法。
DateTime
实例不是字符串,但它可以通过调用其
toString
方法生成ISO字符串,该方法反过来调用内置格式化程序。看医生。如果需要任何其他类型的字符串,请定义自己的格式化程序实例。