2015-01-06 9 views
-1

У меня свидание с этим форматом: Вс окт 19 1:00:00 ADT 2014преобразования даты из одного формата в другой не работает

и мне нужно, чтобы преобразовать его в следующем формате, но я не могу,

Вот мой код:

// The test string 
    String str = "Sun Oct 19 01:00:00 ADT 2014"; 

    // Formatter for the input date 
    final DateTimeFormatter inputFormat = 
    DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy"); 

    // The parsed date 
    final LocalDateTime parsed = LocalDateTime.parse(str, inputFormat); 

     // The output format(s). Specify the one you need 
    final DateTimeFormatter outputFormat1 = DateTimeFormatter.ofPattern("yyyy/MM/dd"); 
    final DateTimeFormatter outputFormat2 = DateTimeFormatter.ofPattern("yyyy-MM-dd"); 

    // Print 
    System.out.println(outputFormat1.format(parsed)); // -> 2014/10/21 
     System.out.println(outputFormat2.format(parsed)); // -> 2014-10-21 

Но он не работает на всех, и я застрял с этим с утра и на самом деле не знаю, как ее решить, кто-нибудь есть какие-либо идеи?

+0

Что именно не работает? Какие ошибки вы получаете? Какой результат вы получаете, и какой результат вы ожидаете? – forgivenson

+2

Ваша строка ввода - это полностью определенный момент времени, включая часовой пояс, так почему вы используете 'LocalDateTime' для синтаксического анализа? – isnot2bad

+0

Вы, кажется, проверяете, будет ли 19 октября 2014 года преобразовываться в 2014-10-21. 19-го числа месяца не 21-го числа месяца. Кроме того, как указывает @forgivenson, вы, вероятно, должны использовать 'ZonedDateTime' вместо' LocalDateTime.' –

ответ

1

Неверный код. Он отлично работает с 19-го

// The test string 
    String str = "Sun Oct 19 01:00:00 ADT 2014"; 

    // Formatter for the input date 
    final DateFormat inputFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"); 
    // The parsed date 
    final Date parsed = inputFormat.parse(str); 

    // The output format(s). Specify the one you need 
    final DateFormat outputFormat1 = new SimpleDateFormat("yyyy/MM/dd"); 
    final DateFormat outputFormat2 = new SimpleDateFormat("yyyy-MM-dd"); 

    // Print 
    System.out.println(outputFormat1.format(parsed)); // -> 2014/10/21 
    System.out.println(outputFormat2.format(parsed)); // -> 2014-10-21 
+0

Спасибо, что сработал :) –

1

Я надеюсь, что вы используете JDK8 и ваш импорт следующие:

import java.time.LocalDateTime; 
import java.time.format.DateTimeFormatter; 

Тогда следующий код:

import java.time.LocalDateTime; 
import java.time.format.DateTimeFormatter; 

public class Main { 

    public static void main(String[] args) { 
     // The test string 
     String str = "Sun Oct 19 01:00:00 ADT 2014"; 

     // Formatter for the input date 
     final DateTimeFormatter inputFormat = 
       DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy"); 

     // The parsed date 
     final LocalDateTime parsed = LocalDateTime.parse(str, inputFormat); 

     // The output format(s). Specify the one you need 
     final DateTimeFormatter outputFormat1 = DateTimeFormatter.ofPattern("yyyy/MM/dd"); 
     final DateTimeFormatter outputFormat2 = DateTimeFormatter.ofPattern("yyyy-MM-dd"); 

     // Print 
     System.out.println(outputFormat1.format(parsed)); // -> 2014/10/21 
     System.out.println(outputFormat2.format(parsed)); // -> 2014-10-21 
    } 
} 

печать, как и ожидалось :

2014/10/19 
2014-10-19 

Если вы хотите распечатать 2014/10/21 просто измените str на:

String str = "Tue Oct 21 01:00:00 ADT 2014"; 
Смежные вопросы