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 le sortir au format YYYY-MM-DD
.
2011-01-18
Comment puis-je atteindre cet objectif?
D'accord, d'après les réponses que j'ai trouvées ci-dessous, voici une chose que j'ai essayée:
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 génère 02011-00-1
au lieu du 2011-01-18
souhaité. Qu'est-ce que je fais mal?
Utilisez LocalDateTime#parse()
(ou ZonedDateTime#parse()
si la chaîne contient une partie de fuseau horaire) pour analyser un String
dans un certain motif en 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"));
Utilisez LocalDateTime#format()
(ou ZonedDateTime#format()
) pour formater un LocalDateTime
en un String
dans un certain motif.
String newstring = datetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println(newstring); // 2011-01-18
Ou , lorsque vous n'êtes pas encore sur Java 8, utilisez SimpleDateFormat#parse()
pour analyser un String
dans un certain motif 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);
Utilisez SimpleDateFormat#format()
pour formater un Date
en un String
dans un certain motif.
String newstring = new SimpleDateFormat("yyyy-MM-dd").format(date);
System.out.println(newstring); // 2011-01-18
Update : selon votre tentative infructueuse: les modèles sont sensibles à la casse . Lisez le Java.text.SimpleDateFormat
javadoc ce que les différentes parties représentent. Ainsi, par exemple, M
pour les mois et m
pour les minutes. De plus, il existe des années de quatre chiffres yyyy
et non de cinq yyyyy
. Regardez de plus près les extraits de code que j'ai posté ci-dessus.
Le formatage étant sensible à la casse, utilisez donc MM pour mois et non mm (pour minute) et yyyy pour référence , vous pouvez utiliser la feuille de triche suivante.
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
La réponse est bien sûr de créer un objet SimpleDateFormat et de l’utiliser pour analyser Chaînes en Date et mettre en forme Dates en 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 identique à "MM". Utilisez MM pour les mois et mm pour les minutes. De plus, aaaa 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));
}
}
Pourquoi ne pas simplement utiliser cette
Date convertToDate(String receivedDate) throws ParseException{
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
Date date = formatter.parse(receivedDate);
return date;
}
Aussi, c'est l'inverse:
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
String requiredDate = df.format(new Date()).toString();
ou
Date requiredDate = df.format(new Date());
À votre santé!
Utilisation du package Java.time
dans Java 8 et versions ultérieures:
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);
Les autres réponses sont correctes, en gros vous aviez le mauvais nombre de caractères "y" dans votre modèle.
Un autre problème cependant… Vous n'avez pas abordé les fuseaux horaires. Si vous aviez l'intention de UTC , alors vous auriez dû le dire. Sinon, les réponses ne sont pas complètes. Si tout ce que vous voulez, c'est la date sans l'heure, pas de problème. Mais si vous effectuez des travaux ultérieurs pouvant impliquer du temps, vous devez spécifier un fuseau horaire.
Voici le même type de code mais en utilisant la bibliothèque open source tierce Joda-Time 2.3
// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
String date_s = "2011-01-18 00:00:00.0";
org.joda.time.format.DateTimeFormatter formatter = org.joda.time.format.DateTimeFormat.forPattern( "yyyy-MM-dd' 'HH:mm:ss.SSS" );
// By the way, if your date-time string conformed strictly to ISO 8601 including a 'T' rather than a SPACE ' ', you could
// use a formatter built into Joda-Time rather than specify your own: ISODateTimeFormat.dateHourMinuteSecondFraction().
// Like this:
//org.joda.time.DateTime dateTimeInUTC = org.joda.time.format.ISODateTimeFormat.dateHourMinuteSecondFraction().withZoneUTC().parseDateTime( date_s );
// Assuming the date-time string was meant to be in UTC (no time zone offset).
org.joda.time.DateTime dateTimeInUTC = formatter.withZoneUTC().parseDateTime( date_s );
System.out.println( "dateTimeInUTC: " + dateTimeInUTC );
System.out.println( "dateTimeInUTC (date only): " + org.joda.time.format.ISODateTimeFormat.date().print( dateTimeInUTC ) );
System.out.println( "" ); // blank line.
// Assuming the date-time string was meant to be in Kolkata time zone (formerly known as Calcutta). Offset is +5:30 from UTC (note the half-hour).
org.joda.time.DateTimeZone kolkataTimeZone = org.joda.time.DateTimeZone.forID( "Asia/Kolkata" );
org.joda.time.DateTime dateTimeInKolkata = formatter.withZone( kolkataTimeZone ).parseDateTime( date_s );
System.out.println( "dateTimeInKolkata: " + dateTimeInKolkata );
System.out.println( "dateTimeInKolkata (date only): " + org.joda.time.format.ISODateTimeFormat.date().print( dateTimeInKolkata ) );
// This date-time in Kolkata is a different point in the time line of the Universe than the dateTimeInUTC instance created above. The date is even different.
System.out.println( "dateTimeInKolkata adjusted to UTC: " + dateTimeInKolkata.toDateTime( org.joda.time.DateTimeZone.UTC ) );
Quand couru…
dateTimeInUTC: 2011-01-18T00:00:00.000Z
dateTimeInUTC (date only): 2011-01-18
dateTimeInKolkata: 2011-01-18T00:00:00.000+05:30
dateTimeInKolkata (date only): 2011-01-18
dateTimeInKolkata adjusted to UTC: 2011-01-17T18:30:00.000Z
[édité pour inclure les corrections de BalusC] La classe SimpleDateFormat 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();
}
Veuillez vous reporter à "Modèles de date et d'heure" ici. http://docs.Oracle.com/javase/7/docs/api/Java/text/SimpleDateFormat.html
import Java.text.SimpleDateFormat;
import Java.util.Date;
import Java.text.ParseException;
public class DateConversionExample{
public static void main(String arg[]){
try{
SimpleDateFormat sourceDateFormat = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
Date date = sourceDateFormat.parse("2011-01-18 00:00:00.0");
SimpleDateFormat targetDateFormat = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(targetDateFormat.format(date));
}catch(ParseException e){
e.printStackTrace();
}
}
}
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");
}
public class SystemDateTest {
String stringDate;
public static void main(String[] args) {
SystemDateTest systemDateTest = new SystemDateTest();
// format date into String
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;
}
}
String str = "2000-12-12";
Date dt = null;
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
try
{
dt = formatter.parse(str);
}
catch (Exception e)
{
}
JOptionPane.showMessageDialog(null, formatter.format(dt));
Vous pouvez simplement utiliser:
Date yourDate = new Date();
SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
String date = DATE_FORMAT.format(yourDate);
Ça fonctionne parfaitement!
Vous pouvez également utiliser substring ()
String date_s = "2011-01-18 00:00:00.0";
date_s.substring(0,10);
Si vous voulez un espace devant la date, utilisez
String date_s = " 2011-01-18 00:00:00.0";
date_s.substring(1,11);
private SimpleDateFormat dataFormat = new SimpleDateFormat("dd/MM/yyyy");
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if(value instanceof Date) {
value = dataFormat.format(value);
}
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
};
Vous pouvez essayer Java 8 new date
, des informations supplémentaires sont disponibles sur documentation Oracle .
Ou vous pouvez essayer l'ancien
public static Date getDateFromString(String format, String dateStr) {
DateFormat formatter = new SimpleDateFormat(format);
Date date = null;
try {
date = (Date) formatter.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
public static String getDate(Date date, String dateFormat) {
DateFormat formatter = new SimpleDateFormat(dateFormat);
return formatter.format(date);
}
supprimer une forme y SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd");
devrait être SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-mm-dd");
Disons que vous voulez changer 2019-12-20 10h50 GMT + 6: 00 au 2019-12-20 10h50 tout d'abord vous devez comprendre le format de la date d'abord un format de date est aaaa-MM-jj hh : mm a zzz et le deuxième format de date sera aaaa-MM-jj hh: mm a
il suffit de renvoyer une chaîne de cette fonction comme.
public String convertToOnlyDate(String currentDate) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm a ");
Date date;
String dateString = "";
try {
date = dateFormat.parse(currentDate);
System.out.println(date.toString());
dateString = dateFormat.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return dateString;
}
Cette fonction retournera votre réponse désirée. Si vous souhaitez personnaliser davantage, ajoutez ou supprimez un composant du format de date.
SimpleDateFormat dt1 = new SimpleDateFormat ("aaaa-mm-jj");