我想问一下,如何将日期从Parse.com(格式为“Sat Mar 01 15:52:20 GMT + 1:00 2014”)添加到相同的日期类型作为系统中的日期和时间。我要问的第二件事是,如何只从例如Parse.com获得“月:日:小时:分钟:年”,即使日期的格式如上所述。
感谢您的任何建议!
答案 0 :(得分:1)
OffsetDateTime.parse( // Parse input string as a `OffsetDateTime` object, with the given offset-from-UTC.
"Sat Mar 01 15:52:20 GMT+1:00 2014" ,
DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss O uuuu" , Locale.US )
).toInstant() // Convert from the given offset-from-UTC to UTC.
您可能会对日期和时间跟踪在Java中的工作方式感到困惑。 java.util.Date类跟踪自Unix epoch以来的毫秒数。它里面没有String。
现代方法使用 java.time 类。
如果您收到"Sat Mar 01 15:52:20 GMT+1:00 2014"
等字符串,则解析为OffsetDateTime
。顺便说一下,这是一种糟糕的格式。最好尽可能使用标准ISO 8601格式将日期时间值作为文本进行交换。
指定格式设置模式以匹配您的输入。
注意Locale
参数。 Locale
确定(a)翻译日期名称,月份名称等的人类语言,以及(b)决定缩写,大小写,标点符号,分隔符等问题的文化规范。
String input = "Sat Mar 01 15:52:20 GMT+1:00 2014" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss O uuuu" , Locale.US );
OffsetDateTime odt = OffsetDateTime.parse( input , f );
生成一个字符串,以标准ISO 8601格式表示此OffsetDateTime
对象的值。
odt.toString():2014-03-01T15:52:20 + 01:00
要生成其他格式的字符串,请搜索DateTimeFormatter
。
要通过UTC的挂钟时间查看同一时刻,请提取Instant
个对象。
Instant instant = odt.toInstant() ; // Extract an `Instant`, always in UTC.
更新:此部分现已过时,但保留为历史记录。仅供参考,Joda-Time项目现在位于maintenance mode,团队建议迁移到java.time课程。
Joda-Time是数据时间处理的首选库。 java.util.Date& .Calendar&与Java捆绑在一起的SimpleTextFormat类是众所周知的麻烦(不是Sun最好的工作)。这些旧课程已被新Java 8 java.time package取代,受到Joda-Time的启发。
在Joda-Time中,DateTime对象类似于java.util.Date对象,因为它跟踪自Unix-epoch以来的毫秒数。但不同之处在于DateTime确实知道自己指定的时区。
这里有一些代码可以帮助您入门。搜索StackOverflow以查找更多示例。
您提供的字符串存在一个问题。 GMT的偏移量为+1:00
,1
之前没有前导零。这不能由Joda-Time直接解析。希望这是你做的错字,而不是Parse.com生成的糟糕格式。
您在下面看到的格式是标准ISO 8601。
String input = "Sat Mar 01 15:52:20 GMT+01:00 2014";
DateTimeFormatter formatterInput = DateTimeFormat.forPattern( "EEE MMM dd HH:mm:ss 'GMT'Z yyyy" ).withLocale( Locale.ENGLISH );
DateTimeZone timeZone = DateTimeZone.forID( "America/Los_Angeles" );
DateTime dateTimeLosAngeles = formatterInput.withZone( timeZone ).parseDateTime( input );
DateTime dateTimeUtc = dateTimeLosAngeles.withZone( DateTimeZone.UTC );
DateTimeFormatter formatterOutput = DateTimeFormat.forStyle( "SS" );
String output = formatterOutput.print( dateTimeLosAngeles );
转储到控制台...
System.out.println( "input: " + input );
System.out.println( "dateTimeLosAngeles: " + dateTimeLosAngeles );
System.out.println( "dateTimeUtc: " + dateTimeUtc );
System.out.println( "output: " + output );
跑步时......
input: Sat Mar 01 15:52:20 GMT+01:00 2014
dateTimeLosAngeles: 2014-03-01T06:52:20.000-08:00
dateTimeUtc: 2014-03-01T14:52:20.000Z
output: 3/1/14 6:52 AM
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
答案 1 :(得分:1)
您只需尝试这样就可以轻松实现日期格式转换......
String inputPattern = "yyyy-MM-dd hh:mm:ss";
String outputPattern = "dd-MMM-yyyy hh:mm a";
SimpleDateFormat inFormat = new SimpleDateFormat(inputPattern);
SimpleDateFormat outputFormat = new SimpleDateFormat(outputPattern);
Date date1 = null;
if (date != null) {
try {
date1 = inFormat.parse(date);
str = outputFormat.format(date1);
Log.d(null, str);
} catch (ParseException e) {
e.printStackTrace();
}
} else {
str = " ";
}