Подтвердить что ты не робот

Как преобразовать временную метку из формата yyyy-MM-ddThh: mm: ss: SSSZ в формат MM/dd/yyyy hh: mm: ss.SSS? От ISO8601 до UTC

Я хочу преобразовать временную метку 2011-03-10T11: 54: 30.207Z - 10/03/2011 11: 54: 30.207. Как я могу это сделать? Я хочу преобразовать формат ISO8601 в UTC, а затем, что UTC должно быть известно о местоположении. Пожалуйста, помогите

String str_date="2011-03-10T11:54:30.207Z";
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
date = (Date)formatter.parse(str_date);
System.out.println("output: " +date );

Исключение: java.text.ParseException: Непревзойденная дата: "2011-03-10T11: 54: 30.207Z"

4b9b3361

Ответ 1

Во-первых, вам нужно знать, что UTC - это не формат, а часовой пояс. Поэтому "преобразование с ISO8601 в UTC" на самом деле не имеет смысла в качестве концепции.

Однако здесь приведен пример программы с использованием Joda Time, которая анализирует текст в DateTime, а затем форматирует его. Я догадался в формате, который вы, возможно, захотите использовать, - вы на самом деле не предоставили достаточной информации о том, что вы пытаетесь сделать, чтобы сказать больше. Вы также можете рассмотреть часовые пояса... вы хотите отобразить местное время в указанный момент? Если это так, вам нужно будет выработать часовой пояс пользователя и преобразовать его соответствующим образом.

import org.joda.time.*;
import org.joda.time.format.*;

public class Test {
    public static void main(String[] args) {
        String text = "2011-03-10T11:54:30.207Z";
        DateTimeFormatter parser = ISODateTimeFormat.dateTime();
        DateTime dt = parser.parseDateTime(text);

        DateTimeFormatter formatter = DateTimeFormat.mediumDateTime();
        System.out.println(formatter.print(dt));
    }
}

Ответ 2

Да. вы можете использовать SimpleDateFormat, как это.

SimpleDateFormat formatter, FORMATTER;
formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
String oldDate = "2011-03-10T11:54:30.207Z";
Date date = formatter.parse(oldDate.substring(0, 24));
FORMATTER = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss.SSS");
System.out.println("OldDate-->"+oldDate);
System.out.println("NewDate-->"+FORMATTER.format(date));

Выход OldDate → 2011-03-10T11: 54: 30.207Z NewDate → 10-Mar-2011 11: 54: 30.207

Ответ 3

Введите исходную дату в объект Date, а затем распечатайте результат с помощью a DateFormat. Возможно, вам придется разделить строку на более мелкие части, чтобы создать исходный объект Date, если метод автоматического анализа не принимает ваш формат.

псевдокод:

Date inputDate = convertYourInputIntoADateInWhateverWayYouPrefer(inputString);
DateFormat outputFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss.SSS");
String outputString = outputFormat.format(inputDate);

Ответ 4

Возможно, вам стоит взглянуть на время joda, которое немного проще в использовании, чем средства исходной даты java, и предоставляет множество общие шаблоны дат заранее.

В ответ на комментарии более подробно:

Для этого, используя время Joda, вам нужно два DateTimeFormatters - один для вашего формата ввода для синтаксического анализа вашего ввода и один для вашего формата вывода напечатайте свой результат. Формат ввода - это стандартный формат ISO, поэтому для класса JODA ISODateTimeFormat для него уже существует статический метод с парсером: dateHourMinuteSecondMillis. Формат вывода не та, для которой у них есть готовый форматтер, поэтому вам придется сделать это самостоятельно, используя DateTimeFormat. Я думаю, что DateTimeFormat.forPattern("mm/dd/yyyy kk:mm:ss.SSS"); должен сделать трюк. После того, как у вас есть два форматирования, вызовите метод parseDateTime() в формате ввода и метод print в формате вывода, чтобы получить результат в виде строки.

Объединение вместе должно выглядеть примерно так (предупреждение, непроверено):

DateTimeFormatter input = ISODateTimeFormat.dateHourMinuteSecondMillis();
DateTimeFormatter output = DateTimeFormat.forPattern("mm/dd/yyyy kk:mm:ss.SSS");
String outputFormat = output.print( input.parseDate(inputFormat) );

Ответ 5

Надеюсь, что это поможет:

public String getSystemTimeInBelowFormat() {
    String timestamp = new SimpleDateFormat("yyyy-mm-dd 'T' HH:MM:SS.mmm-HH:SS").format(new Date());
    return timestamp;
}

Ответ 6

Используйте DateFormat. (Извините, но краткость вопроса не требует более подробного ответа.)