Wijzig datumnotatie in een Java-tekenreeks

Ik heb een Stringdie een datum voorstelt.

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

Ik wil het graag converteren naar een Dateen 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-1weer 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 Stringin 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 LocalDateTimeop te maken in een Stringin 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 Stringin 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 Dateop te maken in een Stringin 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.SimpleDateFormatJavadoc waarvoor de afzonderlijke onderdelen voor staan. Dus staat bijvoorbeeld bijvoorbeeld Mvoor maanden en Mgedurende 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.timegebruiken 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 Datekunnen 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");

Other episodes