将日期从Parse.com放入与系统日期相同的类型

时间:2014-03-02 13:25:20

标签: java android parse-platform android-date android-dateutils

我想问一下,如何将日期从Parse.com(格式为“Sat Mar 01 15:52:20 GMT + 1:00 2014”)添加到相同的日期类型作为系统中的日期和时间。我要问的第二件事是,如何只从例如Parse.com获得“月:日:小时:分钟:年”,即使日期的格式如上所述。

感谢您的任何建议!

2 个答案:

答案 0 :(得分:1)

TL;博士

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

现代方法使用 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

的Stack Overflow

要通过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:001之前没有前导零。这不能由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.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance 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 = " ";
    }