ฉันต้องการแปลงjava.util.Dateวัตถุเป็น a Stringใน Java
รูปแบบคือ 2010-05-30 22:15:52 
Dateในปี 2019 คลาสนั้นออกแบบมาไม่ดีและล้าสมัยไปนาน ใช้แทนInstantหรือระดับอื่นจากjava.time วันที่ Java ที่ทันสมัยและเวลา API
                ฉันต้องการแปลงjava.util.Dateวัตถุเป็น a Stringใน Java
รูปแบบคือ 2010-05-30 22:15:52 
Dateในปี 2019 คลาสนั้นออกแบบมาไม่ดีและล้าสมัยไปนาน ใช้แทนInstantหรือระดับอื่นจากjava.time วันที่ Java ที่ทันสมัยและเวลา API
                คำตอบ:
แปลงDateเป็นStringโดยใช้DateFormat#formatวิธีการ:
String pattern = "MM/dd/yyyy HH:mm:ss";
// Create an instance of SimpleDateFormat used for formatting 
// the string representation of date according to the chosen pattern
DateFormat df = new SimpleDateFormat(pattern);
// Get the today date using Calendar object.
Date today = Calendar.getInstance().getTime();        
// Using DateFormat format method we can create a string 
// representation of a date with the defined format.
String todayAsString = df.format(today);
// Print the result!
System.out.println("Today is: " + todayAsString);
Calendarแทนธรรมดาnew Date()? มีความแตกต่างหรือไม่?
                    MM/dd/yyyyรูปแบบโง่และเสีย อย่าใช้มัน การใช้งานเสมอหรือdd/MM/yyyy yyyy-MM-dd
                    yyyy-MM-ddทุกที่ แต่คุณจะทำอะไรได้บ้าง)
                    Format formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = formatter.format(date);
คอมมอนส์ lang- date DateFormatUtilsเต็มไปด้วยสินค้า (ถ้าคุณมีคอมมอนส์ lang ใน classpath ของคุณ)
//Formats a date/time into a specific pattern
 DateFormatUtils.format(yourDate, "yyyy-MM-dd HH:mm:SS");nullตรวจสอบเพิ่มเติม
                    myUtilDate.toInstant()  // Convert `java.util.Date` to `Instant`.
          .atOffset( ZoneOffset.UTC )  // Transform `Instant` to `OffsetDateTime`.
          .format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )  // Generate a String.
          .replace( "T" , " " )  // Put a SPACE in the middle.2014-11-14 14:05:09
วิธีที่ทันสมัยคือคลาส java.time ที่แทนที่คลาสวันที่และเวลาเก่าที่ลำบาก
แปลงแรกของคุณไปยังjava.util.Date ชั้นหมายถึงช่วงเวลาบนไทม์ไลน์ในส่วนUTCมีความละเอียดของนาโนวินาที (ถึงเก้า (9) ตัวเลขของส่วนทศนิยม)InstantInstant
การแปลงเป็น / จาก java.time ดำเนินการโดยวิธีการใหม่ที่เพิ่มในคลาสเก่า
Instant instant = myUtilDate.toInstant();ทั้งของคุณjava.util.Dateและjava.time.Instantอยู่ในUTC หากคุณต้องการดูวันที่และเวลาในรูปแบบ UTC โปรดทำตาม เรียกใช้toStringเพื่อสร้างสตริงในรูปแบบISO 8601 มาตรฐาน
String output = instant.toString();  2014-11-14T14: 05: 09Z
สำหรับรูปแบบอื่น ๆ ที่คุณต้องการที่จะเปลี่ยนคุณเข้าสู่ความยืดหยุ่นมากขึ้นInstantOffsetDateTime
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );odt.toString (): 2020-05-01T21: 25: 35.957Z
เห็นว่ารหัสทำงานอยู่ที่ IdeOne.com
ที่จะได้รับในรูปแบบ String DateTimeFormatterคุณต้องการระบุ คุณสามารถระบุรูปแบบที่กำหนดเองได้ แต่ฉันจะใช้หนึ่งในฟอร์แมตเตอร์ที่กำหนดไว้ล่วงหน้า ( ISO_LOCAL_DATE_TIME) และแทนที่Tในเอาต์พุตด้วย SPACE
String output = odt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
                   .replace( "T" , " " );2014-11-14 14:05:09
โดยวิธีการที่ฉันไม่แนะนำรูปแบบชนิดนี้ที่คุณตั้งใจจะสูญเสียข้อมูลoffset-from-UTCหรือเขตเวลา สร้างความคลุมเครือตามความหมายของค่าวันที่และเวลาของสตริงนั้น
ระวังการสูญหายของข้อมูลเนื่องจากเศษส่วนที่สองจะถูกละเว้น (ถูกตัดทอนอย่างมีประสิทธิภาพ) ในการแสดงค่าวันที่และเวลาของสตริง
จะเห็นว่าช่วงเวลาเดียวกันผ่านเลนส์ของบางภูมิภาคโดยเฉพาะอย่างยิ่งในเวลาที่ผนังนาฬิกาให้ใช้จะได้รับZoneIdZonedDateTime
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );zdt.toString (): 2014-11-14T14: 05: 09-05: 00 [อเมริกา / มอนทรีออล]
เพื่อสร้างรูปแบบ String ทำเช่นเดียวกันกับข้างต้น แต่แทนที่ด้วยodtzdt
String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
                   .replace( "T" , " " );2014-11-14 14:05:09
String::replaceถ้ารันรหัสนี้เป็นจำนวนมากครั้งคุณอาจต้องการที่จะเป็นบิตมีประสิทธิภาพมากขึ้นและหลีกเลี่ยงการเรียกร้องให้ การวางสายนั้นจะทำให้รหัสของคุณสั้นลง หากต้องการให้ระบุรูปแบบการจัดรูปแบบของคุณเองในDateTimeFormatterวัตถุของคุณเอง แคชอินสแตนซ์นี้เป็นค่าคงที่หรือสมาชิกเพื่อใช้ซ้ำ
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" );  // Data-loss: Dropping any fractional second.ใช้ตัวจัดรูปแบบนั้นโดยส่งอินสแตนซ์
String output = zdt.format( f );java.timeกรอบถูกสร้างขึ้นใน Java 8 และต่อมา ชั้นเรียนเหล่านี้แย่งลำบากเก่าชั้นเรียนวันที่เวลาเช่นjava.util.Date, และ.Calendarjava.text.SimpleDateFormat
Joda เวลาโครงการขณะนี้อยู่ในโหมดการบำรุงรักษาให้คำแนะนำแก่การโยกย้ายไปยัง java.time
ต้องการเรียนรู้เพิ่มเติมโปรดดูที่ออราเคิลกวดวิชา และค้นหา Stack Overflow สำหรับตัวอย่างและคำอธิบายมากมาย
ฟังก์ชั่นจาวาส่วนใหญ่นั้นกลับไปที่ Java 6 และ 7 ในThreeTen-Backportและปรับใช้กับAndroidในThreeTenABP เพิ่มเติม (ดูวิธีการใช้ ... )
โครงการThreeTen-Extraขยาย java.time ด้วยคลาสเพิ่มเติม โครงการนี้เป็นพื้นฐานที่พิสูจน์ได้สำหรับการเพิ่มเติมในอนาคตไปยัง java.time
Zใช้แทน+00:00ค่าเริ่มต้น ฉันแก้ไขคำตอบขอบคุณ FYI เหล่านั้นหมายถึงสิ่งเดียวกัน: Zเด่นชัด“ซูลู” +00:00หมายถึงชดเชยศูนย์ชั่วโมงนาทีวินาทีเช่นเดียวกับ 8601 ISOมาตรฐานการสนับสนุนทั้งสองรูปแบบ
                    atOffsetวิธีการในInstantการเรียนใน Java 8. ดู  Instant::atOffsetJavadoc: ใน Java 8 การโทรเช่นInstant.now().atOffset( ZoneOffset.UTC ).toString()จะทำงาน ตรวจสอบใบimportแจ้งยอดของคุณ ตรวจสอบว่า IDE / โครงการของคุณได้รับการตั้งค่าให้รัน Java 8 หรือใหม่กว่าแทนที่จะใช้ Java เวอร์ชันก่อนหน้า ดูโค้ดที่เผยแพร่สดได้ที่ IdeOne.com: ideone.com/2Vm2O5
                    Altenative one-liners ใน java แบบธรรมดา:
String.format("The date: %tY-%tm-%td", date, date, date);
String.format("The date: %1$tY-%1$tm-%1$td", date);
String.format("Time with tz: %tY-%<tm-%<td %<tH:%<tM:%<tS.%<tL%<tz", date);
String.format("The date and time in ISO format: %tF %<tT", date);สิ่งนี้ใช้ตัวจัดรูปแบบและการจัดทำดัชนีแบบสัมพันธ์แทนSimpleDateFormatซึ่งไม่ปลอดภัยสำหรับเธรด btw
ทำซ้ำได้มากขึ้นเล็กน้อย แต่ต้องการเพียงหนึ่งคำสั่ง อาจเป็นประโยชน์ในบางกรณี
ทำไมคุณไม่ใช้ Joda (org.joda.time.DateTime) มันเป็นพื้นซับเดียว
Date currentDate = GregorianCalendar.getInstance().getTime();
String output = new DateTime( currentDate ).toString("yyyy-MM-dd HH:mm:ss");
// output: 2014-11-14 14:05:09DateTimeวัตถุ new DateTime( currentDate , DateTimeZone.forID( "America/Montreal" ) )
                    HH(0-23) เป็นเรื่องปกติมากขึ้น
                    ในนัดเดียว;)
เพื่อให้ได้วันที่
String date = new SimpleDateFormat("yyyy-MM-dd",   Locale.getDefault()).format(new Date());เพื่อให้ได้เวลา
String time = new SimpleDateFormat("hh:mm", Locale.getDefault()).format(new Date());เพื่อให้ได้วันและเวลา
String dateTime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.getDefaut()).format(new Date());Happy coding :)
java.util.Date, java.util.Calendarและjava.text.SimpleDateFormatตอนนี้มรดกแทนที่โดยjava.timeชั้นเรียนที่สร้างขึ้นใน Java 8 และ Java 9 โปรดดูที่การสอนโดยออราเคิล 
                    public static String formateDate(String dateString) {
    Date date;
    String formattedDate = "";
    try {
        date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss",Locale.getDefault()).parse(dateString);
        formattedDate = new SimpleDateFormat("dd/MM/yyyy",Locale.getDefault()).format(date);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return formattedDate;
}วิธีที่ง่ายที่สุดในการใช้งานมีดังต่อไปนี้:
currentISODate = new Date().parse("yyyy-MM-dd'T'HH:mm:ss", "2013-04-14T16:11:48.000");โดยที่ "yyyy-MM-dd'T'HH: mm: ss" เป็นรูปแบบของวันที่อ่าน
เอาท์พุท: อาทิตย์ 14 เมษายน 16:11:48 EEST 2013
หมายเหตุ: HH vs hh - HH หมายถึงรูปแบบเวลา 24 ชั่วโมง - hh หมายถึงรูปแบบเวลา 12 ชั่วโมง
หากคุณต้องการเวลาจากวันที่คุณสามารถใช้คุณสมบัติของ String
Date test = new Date();
String dayString = test.toString();
String timeString = dayString.substring( 11 , 19 );นี้โดยอัตโนมัติจะตัดส่วนเวลาของ String timeStringและบันทึกไว้ภายใน
นี่คือตัวอย่างของการใช้Java 8 Time API ใหม่เพื่อจัดรูปแบบดั้งเดิม java.util.Date :
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS Z")
        .withZone(ZoneOffset.UTC);
    String utcFormatted = formatter.format(date.toInstant()); 
    ZonedDateTime utcDatetime = date.toInstant().atZone(ZoneOffset.UTC);
    String utcFormatted2 = utcDatetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS Z"));
    // gives the same as above
    ZonedDateTime localDatetime = date.toInstant().atZone(ZoneId.systemDefault());
    String localFormatted = localDatetime.format(DateTimeFormatter.ISO_ZONED_DATE_TIME);
    // 2011-12-03T10:15:30+01:00[Europe/Paris]
    String nowFormatted = LocalDateTime.now().toString(); // 2007-12-03T10:15:30.123เป็นเรื่องที่ดีเกี่ยวกับDateTimeFormatterว่าสามารถแคชได้อย่างมีประสิทธิภาพเนื่องจากมันปลอดภัยต่อเธรด (ไม่เหมือนSimpleDateFormat)
รายการของ fomatters กำหนดไว้ล่วงหน้าและการอ้างอิงรูปแบบสัญกรณ์
เครดิต:
วิธีการแยก / จัดรูปแบบวันที่ด้วย LocalDateTime (Java 8)
Java8 java.util.Date แปลงเป็น java.time.ZonedDateTime
ความแตกต่างระหว่าง java 8 ZonedDateTime และ OffsetDateTime คืออะไร
ลองนี้
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class Date
{
    public static void main(String[] args) 
    {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String strDate = "2013-05-14 17:07:21";
        try
        {
           java.util.Date dt = sdf.parse(strDate);         
           System.out.println(sdf.format(dt));
        }
        catch (ParseException pe)
        {
            pe.printStackTrace();
        }
    }
}เอาท์พุท:
2013-05-14 17:07:21สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการจัดรูปแบบวันที่และเวลาในลิงค์อ้างอิงจาวาด้านล่าง
public static void main(String[] args) 
{
    Date d = new Date();
    SimpleDateFormat form = new SimpleDateFormat("dd-mm-yyyy hh:mm:ss");
    System.out.println(form.format(d));
    String str = form.format(d); // or if you want to save it in String str
    System.out.println(str); // and print after that
}ลองทำสิ่งนี้
public static void main(String args[]) {
    Calendar cal = GregorianCalendar.getInstance();
    Date today = cal.getTime();
    DateFormat df7 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    try {           
        String str7 = df7.format(today);
        System.out.println("String in yyyy-MM-dd format is: " + str7);          
    } catch (Exception ex) {
      ex.printStackTrace();
    }
}หรือฟังก์ชั่นยูทิลิตี้
public String convertDateToString(Date date, String format) {
    String dateStr = null;
    DateFormat df = new SimpleDateFormat(format);
    try {
        dateStr = df.format(date);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return dateStr;
}    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String date = "2010-05-30 22:15:52";
    java.util.Date formatedDate = sdf.parse(date); // returns a String when it is parsed
    System.out.println(sdf.format(formatedDate)); // the use of format function returns a StringDate date = new Date();
String strDate = String.format("%tY-%<tm-%<td %<tH:%<tM:%<tS", date);ตัวเลือกหนึ่งบรรทัด
ตัวเลือกนี้ได้ง่ายเพียงบรรทัดเดียวเพื่อเขียนวันที่จริง
โปรดทราบว่านี่คือการใช้
Calendar.classและSimpleDateFormatจากนั้นก็ไม่ได้ใช้ตรรกะภายใต้ Java8
yourstringdate =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());java.util.Date, java.util.Calendarและjava.text.SimpleDateFormatตอนนี้มรดกแทนที่โดยjava.timeชั้นเรียนที่สร้างขึ้นใน Java 8 และต่อมา ดูการสอนโดยออราเคิล 
                    2019-20-23 09:20:22- เดือนที่ 20 ??) (2) ฉันไม่เห็นว่าคำตอบนั้นให้อะไรที่ไม่ได้กล่าวถึงในคำตอบอื่น (3) โปรดอย่าสอนคนหนุ่มสาวให้ใช้SimpleDateFormatคลาสที่ล้าสมัยและมีปัญหาอย่างฉาวโฉ่ อย่างน้อยก็ไม่ใช่ตัวเลือกแรก และไม่ได้โดยไม่ต้องจองใด ๆ วันนี้เรามีมากดีกว่าในการjava.timeที่ทันสมัย Java วันที่และเวลา API,DateTimeFormatterและ