2017-11-24 1 views
1

Ich brauche nur Beispiel Codeblock oder Vorschlag, um den folgenden Datum String zu konvertieren Zeit im Format JJJJ-MM-TT HH: mm: ss?Konvertieren benutzerdefinierte Datum Zeichenfolge (mit am/pm) zu UTC Datum Zeit mit Java

Probe Datum string: 2017.11.23 09.44

gibt es ähnliche Fragen wie diese, aber meine Testdaten mit am/pm.So pls nicht dieses betrachten als

+1

sollte dies tun. - DateTimeFormatter.ofPattern ("MM/TT/JJJJ hh: mm a"); –

+2

@priyadarshiswain "M" für Monat im Jahr, während "m" für "Minute in Stunde" – suvartheec

+0

Mögliches Duplikat von [Java8 DateTimeFormatter am/pm] (https://stackoverflow.com/questions/38250379/java8-datetimeformatter-am- pm). Ich weiß, dass Sie gebeten haben, die Frage nicht als Duplikat zu betrachten, setzen Sie die verknüpfte Frage auch in Kleinbuchstaben, und die akzeptierte Antwort löst das, so dass ich nicht verstehe, warum nicht. –

Antwort

0

SimpleDateFormat's javadoc listet alle duplizieren die Optionen, einschließlich "a" für am/pm Marker.

In Ihrem Fall, benötigen Sie:

SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ssa") 
+0

oder "MM/TT/JJJJ hh: mm a", wenn Sie es im exakten Format in der Frage – suvartheec

+0

Vielen Dank wollen. Korrigiert :) –

0

Der folgende Beispielcode sollte richtig die Konvertierung tun.

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class DateConversion { 

    public static void main(String[] argv) { 

     SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mma"); 
     SimpleDateFormat OutputFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

     String sampleDateString = "11/23/2017 09:44am"; 

     try { 
      Date convertDate = formatter.parse(sampleDateString); 
      System.out.println(OutputFormatter.format(convertDate)); 

     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

    } 

} 

Dies ist die Deklaration der zu analysierenden Datumszeichenfolge.

SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mma"); 

und das Ausgangsdatum als auch

SimpleDateFormat OutputFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
0

Zunächst benötigen Sie ein SimpleDateFormat mit dem richtigen Muster zu erstellen. Diese Klasse hilft Ihnen, Ihren String java.util.Date (more info here) zu analysieren:

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy hh:mma"); 

Wenn Ihr Original-String-Datum in einer speziellen Zeitzone ist, dann müssen Sie den Parser anweisen, diese Zeitzone zu verwenden:

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy hh:mma", Locale.ENGLISH); 

Dann müssen Sie die Zeichenfolge auf dem Laufenden analysieren:

Date d = sdf.parse("11/23/2017 09:44am"); 

Finnaly Sie timezoned Datum UTC konvertieren.

finden Sie den vollständigen Code-Schnipsel unten:

public static void main(String[] args) throws ParseException { 
    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy hh:mma", Locale.ENGLISH); 
    Date d = sdf.parse("11/23/2017 09:44am"); 
    System.out.println(toUtcZonedDateTime(d)); 
} 

public static ZonedDateTime toUtcZonedDateTime(final Date date) { 
    if (date == null) { 
     return null; 
    } 

    final ZoneId utcZone = ZoneOffset.UTC; 
    return ZonedDateTime.ofInstant(date.toInstant(), utcZone); 
} 

Ausgang:

2017-11-23T08:44Z 
+0

Danke für die Lösung. Aber ich möchte das konvertierte UTC-Datum string.Is gibt es eine Möglichkeit, es zu tun? – user2392695

+0

Sie haben zwei Optionen, um java.util.Date in String zu konvertieren. Die erste besteht darin, die Methode toString() für das Datum vatiable zu verwenden. Die zweite Option besteht darin, ein SimpleDateFormat zu erstellen und zu verwenden: String dateStr = sdf.format (Datum) – zappee

2

Sie könnten der Java 8 verwenden time Paket:

String input = "11/23/2017 09:44am"; 
String format = "MM/dd/yyyy hh:mma"; 

DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); 
LocalDateTime date = LocalDateTime.parse(input, formatter); 
System.out.printf("%s%n", date); 

Aber das Problem ist: Diese wirft eine DateTimeParseException, wegen der Kleinschreibung "am".

Ich schaute in der Dokumentation, aber ich konnte keine Standardmethode zum Parsen von Kleinbuchstaben "am" oder "pm" als Meridiem Bezeichner . You'll end up manually replacing them:

input = input.replace("AM", "am").replace("PM","pm"); 

Wie @OleVV in den Kommentaren erwähnt, können Sie einen DateTimeFormatterBuilder und angeben, dass das Parsen Groß- und Kleinschreibung sein sollte:

DateTimeFormatter formatter = new DateTimeFormatterBuilder() 
    .parseCaseInsensitive() 
    .appendPattern(format) 
    .toFormatter(); 

Dann können Sie Verwenden Sie diesen Formatierer als Argument für die Methode LocalDateTime.parse.

Eine andere Antwort der zuvor genannten Post provides a solution, wo Sie die AM/PM-Symbole mit den Kleinbuchstaben Varianten überschreiben können.


Interessanterweise ist die SimpleDateFormattut Unterstützung der Analyse von Klein am/pm.

+0

Möglichkeiten, mit dem Kleinbuchstaben am/pm umzugehen: (1) Konvertiere einfach den ganzen String vor dem Parsen in Großbuchstaben (da es keine anderen Buchstaben gibt) das ist harmlos). (2) Verwenden Sie einen 'DateTimeFormatterBuilder', um entweder (a) simple: case insensitive parsing anzugeben (b) literal strings für AM und PM anzugeben. –

+0

Ich empfehle Ihnen, auch ein explizites Gebietsschema anzugeben. AM und PM werden so in Englisch aufgerufen, andere Sprachen können andere Namen haben, daher funktioniert der Code möglicherweise nicht auf allen Computern mit angegebenem Gebietsschema. –

Verwandte Themen