Java 将Joda Time DateTime-ISO 8601格式日期转换为其他日期格式
在我的Java应用程序中,我使用它将应用程序用户输入的日期从MM/dd/yyyy转换为ISO 8601格式,以便将其保存在DB中 有人能告诉我如何使用Joda Time将日期转换回MM/dd/yyyy格式吗 我的代码将用户日期转换为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
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字符串,该方法反过来调用内置格式化程序。看医生。如果需要任何其他类型的字符串,请定义自己的格式化程序实例。