1)我从API获得的日期格式为yyyy-MM-dd'T'HH:mm:ss.SSSXXX
2)我想返回一个Json列表,其中日期以不同的格式显示在前端,例如:dd MM HH:mm
在2)示例中是否有任何注释或属性可以重新映射日期,就像在1)中一样,可以通过@JsonFormat
轻松实现。
答案 0 :(得分:2)
格式化格式中的XXX
是指offset-from-UTC。这意味着日期和日期表示的时刻比基准UTC早或晚数小时-分钟-秒。
OffsetDateTime
因此使用OffsetDateTime
解析该输入。
OffsetDateTime odt = OffsetDateTime.parse( "2019-01-23T12:34:56.123+05:30" ) ;
请勿误导将LocalDateTime
类用于此类输入。此类故意缺少任何time zone或offset-from-UTC的概念。因此,此类不能用于表示时刻。用此类分析您的输入会不计后果地丢弃有价值的信息。参见:What's the difference between Instant and LocalDateTime?
DateTimeFormatter
要生成以标准ISO 8601格式表示此值的字符串,只需调用toString
。
String output = odt.toString() ; // Generate string in standard ISO 8601 format.
要生成其他格式的字符串,请使用DateTimeFormatter
类。您可以指定自定义格式,或者更好的方法是让类自动为您本地化。
要本地化,请指定:
FormatStyle
来确定字符串应该是多长时间或缩写。Locale
确定:
示例:
Locale l = Locale.CANADA_FRENCH ; // Or Locale.US, Locale.JAPAN, etc.
DateTimeFormatter f =
DateTimeFormatter
.ofLocalizedDateTime( FormatStyle.FULL )
.withLocale( l )
;
String output = zdt.format( f );
Search Stack Overflow获取更多信息,因为DateTimeFormatter
已经被报道了很多次。
您的输入字符串恰好是标准ISO 8601格式。
java.time 类在解析/生成字符串时默认使用这些标准格式。因此,无需指定格式设置模式。
java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
目前位于Joda-Time的maintenance mode项目建议迁移到java.time类。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
在哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如Interval
,YearWeek
,YearQuarter
和more。
答案 1 :(得分:1)
您可以像这样在getter
(例如getDate()
)中添加一些逻辑:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
String inputDate = "2014-07-04T12:08:56.235-07:00";
String inputFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
String outputFormat = "dd MM HH:mm";
// Input formatter
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern(inputFormat);
// Time after formatting
LocalDateTime dateTime = LocalDateTime.parse(inputDate, inputFormatter);
// Output formatter
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern(outputFormat);
// Output date as String
String outputDate = dateTime.format(outputFormatter);
System.out.println(outputDate);
}
}