Question Modifier le format de date dans une chaîne Java


J'ai un String représentant une date.

String date_s = "2011-01-18 00:00:00.0";

Je voudrais le convertir en un Date et la sortie dans YYYY-MM-DD format.

2011-01-18

Comment puis-je atteindre cet objectif?


D'accord, basé sur les réponses que j'ai récupérées ci-dessous, voici quelque chose que j'ai essayé:

String date_s = " 2011-01-18 00:00:00.0"; 
SimpleDateFormat dt = new SimpleDateFormat("yyyyy-mm-dd hh:mm:ss"); 
Date date = dt.parse(date_s); 
SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd");
System.out.println(dt1.format(date));

Mais il sort 02011-00-1 au lieu du désiré 2011-01-18. Qu'est-ce que je fais mal?


419
2018-01-23 05:09


origine


Réponses:


Utilisation LocalDateTime#parse() (ou ZonedDateTime#parse() si la chaîne contient une partie de fuseau horaire) pour analyser String dans un certain modèle dans un LocalDateTime.

String oldstring = "2011-01-18 00:00:00.0";
LocalDateTime datetime = LocalDateTime.parse(oldstring, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"));

Utilisation LocalDateTime#format() (ou ZonedDateTime#format()) pour formater un LocalDateTime dans une String dans un certain modèle.

String newstring = datetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println(newstring); // 2011-01-18

Ou, quand vous n'êtes pas encore sur Java 8, utilisez SimpleDateFormat#parse() analyser un String dans un certain modèle dans un Date.

String oldstring = "2011-01-18 00:00:00.0";
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(oldstring);

Utilisation SimpleDateFormat#format() formater un Date dans une String dans un certain modèle.

String newstring = new SimpleDateFormat("yyyy-MM-dd").format(date);
System.out.println(newstring); // 2011-01-18

Voir également:


Mettre à jour: selon votre tentative ratée: les modèles sont sensible aux majuscules et minuscules. Lis le java.text.SimpleDateFormat javadoc ce que les différentes parties représentent. Donc, par exemple M pendant des mois et m pour quelques minutes. En outre, les années existent de quatre chiffres yyyy, pas cinq yyyyy. Regardez de plus près les extraits de code que j'ai publiés ci-dessus.


460
2018-01-23 05:20



Le formatage est SENSIBLE à la CASE, alors UTILISEZ MM pour le mois non mm (c'est pour une minute) et yyyy Pour Référence vous pouvez utiliser Cheatsheet suivant.

G   Era designator  Text    AD
y   Year    Year    1996; 96
Y   Week year   Year    2009; 09
M   Month in year   Month   July; Jul; 07
w   Week in year    Number  27
W   Week in month   Number  2
D   Day in year Number  189
d   Day in month    Number  10
F   Day of week in month    Number  2
E   Day name in week    Text    Tuesday; Tue
u   Day number of week (1 = Monday, ..., 7 = Sunday)    Number  1
a   Am/pm marker    Text    PM
H   Hour in day (0-23)  Number  0
k   Hour in day (1-24)  Number  24
K   Hour in am/pm (0-11)    Number  0
h   Hour in am/pm (1-12)    Number  12
m   Minute in hour  Number  30
s   Second in minute    Number  55
S   Millisecond Number  978
z   Time zone   General time zone   Pacific Standard Time; PST; GMT-08:00
Z   Time zone   RFC 822 time zone   -0800
X   Time zone   ISO 8601 time zone  -08; -0800; -08:00

Exemples:

"yyyy.MM.dd G 'at' HH:mm:ss z"  2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy"  Wed, Jul 4, '01
"h:mm a"    12:08 PM
"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
"K:mm a, z" 0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa"  02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z"    Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ" 010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"   2001-07-04T12:08:56.235-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"   2001-07-04T12:08:56.235-07:00
"YYYY-'W'ww-u"  2001-W27-3

127
2018-06-26 06:27



La réponse est bien sûr de créer un objet SimpleDateFormat et de l'utiliser pour analyser les chaînes à date et pour mettre en forme les dates dans les chaînes. Si vous avez essayé SimpleDateFormat et que cela n'a pas fonctionné, veuillez montrer votre code et les erreurs que vous pourriez recevoir.

Addendum: "mm" dans le format String n'est pas le même que "MM". Utilisez MM pour les mois et mm pour les minutes. De plus, yyyyy n'est pas la même chose que aaaa. par exemple.,:

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

public class FormateDate {

    public static void main(String[] args) throws ParseException {
        String date_s = "2011-01-18 00:00:00.0";

        // *** note that it's "yyyy-MM-dd hh:mm:ss" not "yyyy-mm-dd hh:mm:ss"  
        SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Date date = dt.parse(date_s);

        // *** same for the format String below
        SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println(dt1.format(date));
    }

}

100
2018-01-23 05:12



Pourquoi ne pas simplement utiliser ceci

Date convertToDate(String receivedDate) throws ParseException{
        SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
        Date date = formatter.parse(receivedDate);
        return date;
    }

Aussi, c'est l'autre façon:

DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
String requiredDate = df.format(new Date()).toString();

ou

Date requiredDate = df.format(new Date());

À votre santé!


16
2018-05-10 11:24



En utilisant le java.time paquet dans Java 8 et plus tard:

String date = "2011-01-18 00:00:00.0";
TemporalAccessor temporal = DateTimeFormatter
    .ofPattern("yyyy-MM-dd HH:mm:ss.S")
    .parse(date); // use parse(date, LocalDateTime::from) to get LocalDateTime
String output = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(temporal);

14
2018-04-20 15:42



[modifié pour inclure les corrections de BalusC] le SimpleDateFormat la classe devrait faire l'affaire:

String pattern = "yyyy-MM-dd HH:mm:ss.S";
SimpleDateFormat format = new SimpleDateFormat(pattern);
try {
  Date date = format.parse("2011-01-18 00:00:00.0");
  System.out.println(date);
} catch (ParseException e) {
  e.printStackTrace();
}

8
2018-01-23 05:17



public class SystemDateTest {

    String stringDate;

    public static void main(String[] args) {
        SystemDateTest systemDateTest = new SystemDateTest();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-mm-yyyy hh:mm:ss");
        systemDateTest.setStringDate(simpleDateFormat.format(systemDateTest.getDate()));
        System.out.println(systemDateTest.getStringDate());
    }

    public Date getDate() {
        return new Date();
    }

    public String getStringDate() {
        return stringDate;
    }

    public void setStringDate(String stringDate) {
        this.stringDate = stringDate;
    }
}

8
2018-02-16 05:48



try
 {
    String date_s = "2011-01-18 00:00:00.0";
    SimpleDateFormat simpledateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
    Date tempDate=simpledateformat.parse(date_s);
    SimpleDateFormat outputDateFormat = new SimpleDateFormat("yyyy-MM-dd");           
    System.out.println("Output date is = "+outputDateFormat.format(tempDate));
  } catch (ParseException ex) 
  {
        System.out.println("Parse Exception");
  }

7
2018-01-07 02:41