基于区域设置的Joda-Time DateTime格式

use*_*756 10 java datetime date jodatime

我从另一个系统收到一个字符串日期,我知道该日期的区域设置(也可从其他系统获得).我想将此String转换为Joda-Time DateTime对象,而不显式指定目标模式.

因此,例如,我想将此字符串"09/29/2014"仅使用区域设置转换为日期对象,而不是将日期格式硬编码为"mm/dd/yyyy".我不能对格式进行硬编码,因为这会根据我收到的日期的当地情况而有所不同.

Men*_*ild 12

String localizedCalendarDate = DateTimeFormat.shortDate().print(new LocalDate(2014, 9, 29));
// uses in Germany: dd.MM.yyyy
// but uses in US: MM/dd/yyyy

LocalDate date =
  DateTimeFormat.mediumDate().withLocale(Locale.US).parseLocalDate("09/29/2014");
DateTime dt = date.toDateTimeAtStartOfDay(DateTimeZone.forID("America/Los_Angeles"));
Run Code Online (Sandbox Code Playgroud)

如您所见,您还需要知道时钟时间(=示例中的一天开始)和时区(示例中为US-California),以便将已解析的日期转换为全局时间戳DateTime.

  • 仅供参考,另一种语法是调用[`DateTimeFormat.forStyle()`](http://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html#forStyle(java.lang) .string))并传递一对字符.为日期部分传递一个字符,为时间部分传递另一个字符 为短格式指定'S'字符,为中等指定'M',为长指定'L',为完整指定'F'.通过指定样式字符" - "可以省略日期或时间. (2认同)