Ik heb een String
die een datum voorstelt.
String date_s = "2011-01-18 00:00:00.0";
Ik wil het graag converteren naar een Date
en uitvoeren in de indeling YYYY-MM-DD
.
18-01-2011
Hoe kan ik dit bereiken?
Ok, op basis van de antwoorden die ik hieronder heb gevonden, heb ik het volgende geprobeerd:
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));
Maar het geeft 02011-00-1
weer in plaats van de gewenste 2011-01-18
. Wat doe ik verkeerd?
Antwoord 1, autoriteit 100%
Gebruik LocalDateTime#parse()
(of ZonedDateTime#parse()
als de tekenreeks plaatsvindt om een tijdzonegedeelte te bevatten) om een String
in een bepaald patroon te ontleden in een LocalDateTime
.
String oldstring = "2011-01-18 00:00:00.0";
LocalDateTime datetime = LocalDateTime.parse(oldstring, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"));
Gebruik LocalDateTime#format()
(of ZonedDateTime#format()
) om een LocalDateTime
op te maken in een String
in een bepaald patroon.
String newstring = datetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println(newstring); // 2011-01-18
Of, als je nog niet op Java 8 zit, gebruik SimpleDateFormat#parse()
om een String
in een bepaald patroon te ontleden in een Date
.
String oldstring = "2011-01-18 00:00:00.0";
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(oldstring);
Gebruik SimpleDateFormat#format()
om een Date
op te maken in een String
in een bepaald patroon.
String newstring = new SimpleDateFormat("yyyy-MM-dd").format(date);
System.out.println(newstring); // 2011-01-18
Zie ook:
update : volgens uw mislukte poging: de patronen zijn hoofdlettergevoelig . Lees de java.text.SimpleDateFormat
Javadoc waarvoor de afzonderlijke onderdelen voor staan. Dus staat bijvoorbeeld bijvoorbeeld M
voor maanden en M
gedurende minuten. Ook bestaan jaarlijks van vier cijfers yyyy
, niet vijf yyyyy
. Kijk dichter bij de codefragmenten die ik hierboven heb gepost.
2, Autoriteit 31%
Formatteren zijn hoofdlettergevoelig, dus gebruik mm voor maand niet mm (dit is voor minuut) en jjjj
Voor referentie U kunt het volgende valsgezel gebruiken.
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
Voorbeelden:
"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
Antwoord 3, autoriteit 21%
Het antwoord is natuurlijk om een SimpleDateFormat-object te maken en dit te gebruiken om Strings to Date te ontleden en om Dates to Strings op te maken. Als je SimpleDateFormat hebt geprobeerd en het werkte niet, laat dan je code en eventuele fouten zien.
Aanvulling: “mm” in het formaat String is niet hetzelfde als “MM”. Gebruik MM voor maanden en mm voor minuten. Ook is yyyyy niet hetzelfde als yyyy. bijv.:
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));
}
}
Antwoord 4, autoriteit 6%
Waarom gebruik je dit niet gewoon
Date convertToDate(String receivedDate) throws ParseException{
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
Date date = formatter.parse(receivedDate);
return date;
}
Dit is ook andersom:
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
String requiredDate = df.format(new Date()).toString();
of
Date requiredDate = df.format(new Date());
Antwoord 5, autoriteit 3%
Het pakket java.time
gebruiken in Java 8 en hoger:
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);
Antwoord 6, autoriteit 2%
[bewerkt om de correcties van BalusC op te nemen]
De klasse SimpleDateFormatzou het lukken:
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();
}
Antwoord 7, autoriteit 2%
Zie “Datum- en tijdpatronen” hier. 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();
}
}
}
Antwoord 8, autoriteit 2%
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");
}
9, Autoriteit 2%
U kunt gewoon gebruiken:
Date yourDate = new Date();
SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
String date = DATE_FORMAT.format(yourDate);
het werkt perfect!
10
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;
}
}
11
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));
Antwoord 12
Je kunt ook substring() gebruiken
String date_s = "2011-01-18 00:00:00.0";
date_s.substring(0,10);
Als je een spatie voor de datum wilt, gebruik dan
String date_s = " 2011-01-18 00:00:00.0";
date_s.substring(1,11);
Antwoord 13
Je zou Java 8nieuwe Date
kunnen proberen, meer informatie is te vinden op de Oracle-documentatie.
Of je kunt de oude proberen
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);
}
Antwoord 14
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);
};
Antwoord 15
verwijder één y uit de opmaak die is opgegeven voor:
SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd");
Het zou moeten zijn:
SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-mm-dd");
Antwoord 16
Stel dat je wilt wijzigen 2019-12-20 10:50 AM GMT+6:00 naar 2019-12-20 10:50 AM
allereerst moet je het datumformaat begrijpen, eerst is een datumformaat
jjjj-MM-dd uu:mm a zzz en de tweede datumnotatie is jjjj-MM-dd uu:mm a
retourneer gewoon een string van deze functie zoals.
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;
}
Deze functie retourneert uw wensantwoord. Als u meer wilt aanpassen, voegt u gewoon een component toe aan of verwijdert u deze uit het datumformaat.
Antwoord 17
We kunnen de datum van vandaag converteren in de notatie ’12 JUN 2020′.
String.valueOf(DateFormat.getDateInstance().format(new Date())));
Antwoord 18
je hebt het mis:
SimpleDateFormat dt1 = nieuw SimpleDateFormat(“jjjj-mm-dd”);
eerste :
zou moeten zijn
new SimpleDateFormat("yyyy-mm-dd");
//jjjj 4 niet 5
deze display 02011, maar yyyy het disply 2011
seconde:
verander je code als volgt
new SimpleDateFormat("yyyy-MM-dd");
ik hoop dat ik je kan helpen
19
/**
* Method will take Date in "MMMM, dd yyyy HH:mm:s" format and return time difference like added: 3 min ago
*
* @param date : date in "MMMM, dd yyyy HH:mm:s" format
* @return : time difference
*/
private String getDurationTimeStamp(String date) {
String timeDifference = "";
//date formatter as per the coder need
SimpleDateFormat sdf = new SimpleDateFormat("MMMM, dd yyyy HH:mm:s");
TimeZone timeZone = TimeZone.getTimeZone("EST");
sdf.setTimeZone(timeZone);
Date startDate = null;
try {
startDate = sdf.parse(date);
} catch (ParseException e) {
MyLog.printStack(e);
}
//end date will be the current system time to calculate the lapse time difference
Date endDate = new Date();
//get the time difference in milliseconds
long duration = endDate.getTime() - startDate.getTime();
long diffInSeconds = TimeUnit.MILLISECONDS.toSeconds(duration);
long diffInMinutes = TimeUnit.MILLISECONDS.toMinutes(duration);
long diffInHours = TimeUnit.MILLISECONDS.toHours(duration);
long diffInDays = TimeUnit.MILLISECONDS.toDays(duration);
if (diffInDays >= 365) {
int year = (int) (diffInDays / 365);
timeDifference = year + mContext.getString(R.string.year_ago);
} else if (diffInDays >= 30) {
int month = (int) (diffInDays / 30);
timeDifference = month + mContext.getString(R.string.month_ago);
}
//if days are not enough to create year then get the days
else if (diffInDays >= 1) {
timeDifference = diffInDays + mContext.getString(R.string.day_ago);
}
//if days value<1 then get the hours
else if (diffInHours >= 1) {
timeDifference = diffInHours + mContext.getString(R.string.hour_ago);
}
//if hours value<1 then get the minutes
else if (diffInMinutes >= 1) {
timeDifference = diffInMinutes + mContext.getString(R.string.min_ago);
}
//if minutes value<1 then get the seconds
else if (diffInSeconds >= 1) {
timeDifference = diffInSeconds + mContext.getString(R.string.sec_ago);
} else if (timeDifference.isEmpty()) {
timeDifference = mContext.getString(R.string.now);
}
return mContext.getString(R.string.added) + " " + timeDifference;
}
20
SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-mm-dd");