วิธีการแปลงวันที่ปัจจุบันเป็นสตริงใน java?


คำตอบ:


216
String date = new SimpleDateFormat("dd-MM-yyyy").format(new Date());

ใช้ชุดค่าผสมนี้และคำตอบด้านล่างสำหรับการจับเวลา C:
php_coder_3809625

@Ian Purton เป็นวันที่สตริงใน UTC tz .. ?
Kanagavelu Sugumar

FYI คลาสที่ยุ่งยากเหล่านี้กลายเป็นมรดกตกทอดโดยคลาส java.time แทน ดูออราเคิลกวดวิชา
Basil Bourque

62
// GET DATE & TIME IN ANY FORMAT
import java.util.Calendar;
import java.text.SimpleDateFormat;
public static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss";

public static String now() {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
return sdf.format(cal.getTime());
}

นำมาจากที่นี่


คำตอบที่ดีที่สุดสำหรับการใช้ปฏิทินแทนวันที่
สุ่ม

5
ฉันสับสน ในจักรวาลใดเป็นCalendarที่ต้องการมากกว่าDate?
jasonmp85

1
FYI คลาสที่ยุ่งยากเหล่านี้กลายเป็นมรดกตกทอดโดยคลาส java.time แทน ดูออราเคิลกวดวิชา
Basil Bourque

27
// On the form: dow mon dd hh:mm:ss zzz yyyy
new Date().toString();

58
ขอโทษด้วยสำหรับการเปิดเผยมากเกินไป
jasonmp85

2
รูปแบบที่ใช้โดยวิธีนั้นแย่มาก นอกจากนี้เขตเวลาเริ่มต้นปัจจุบันของ KVM ของคุณจะถูกนำไปใช้โดยปริยายดังนั้นผลลัพธ์ของคุณจะแตกต่างกันไป และตอนนี้คลาสที่ลำบากเหล่านี้ก็เป็นแบบดั้งเดิมแทนที่ด้วยคลาส java.time ดูออราเคิลกวดวิชา
Basil Bourque

19

ใช้การDateFormatใช้งาน เช่นSimpleDateFormat.

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

FYI คลาสที่ยุ่งยากเหล่านี้กลายเป็นมรดกตกทอดโดยคลาส java.time แทน ดูออราเคิลกวดวิชา
Basil Bourque

14

TL; DR

LocalDate.now()
         .toString() 

2017/01/23

ควรระบุเขตเวลาที่ต้องการ / คาดไว้อย่างชัดเจน

LocalDate.now( ZoneId.of( "America/Montreal" ) )
         .toString() 

java.time

วิธีการที่ทันสมัยเช่น Java 8 และใหม่กว่านั้นใช้กับกรอบjava.time

ระบุเขตเวลาเนื่องจากวันที่แตกต่างกันไปทั่วโลกในช่วงเวลาใดเวลาหนึ่ง

ZoneId zoneId = ZoneId.of( "America/Montreal" ) ;  // Or ZoneOffset.UTC or ZoneId.systemDefault()
LocalDate today = LocalDate.now( zoneId ) ;
String output = today.toString() ;

2017/01/23

ตามค่าเริ่มต้นคุณจะได้รับ String ในรูปแบบISO 8601 มาตรฐาน

สำหรับรูปแบบอื่น ๆ ให้ใช้java.time.format.DateTimeFormatterคลาส


เกี่ยวกับjava.time

java.timeกรอบถูกสร้างขึ้นใน Java 8 และต่อมา ชั้นเรียนเหล่านี้แย่งลำบากเก่ามรดกเรียนวันที่เวลาเช่นjava.util.Date, และCalendarSimpleDateFormat

โครงการJoda-Timeขณะนี้อยู่ในโหมดการบำรุงรักษาแนะนำการโยกย้ายไปยังคลาสjava.time

ต้องการเรียนรู้เพิ่มเติมโปรดดูที่ออราเคิลกวดวิชา และค้นหา Stack Overflow สำหรับตัวอย่างและคำอธิบายมากมาย สเปกJSR 310

คุณสามารถแลกเปลี่ยนวัตถุjava.timeโดยตรงกับฐานข้อมูลของคุณ ใช้ไดรเวอร์ JDBC ที่สอดคล้องกับJDBC 4.2หรือใหม่กว่า ไม่จำเป็นต้องมีสตริงไม่จำเป็นต้องมีjava.sql.*คลาส

จะหาคลาส java.time ได้ที่ไหน?

  • Java SE 8 , Java SE 9 , Java SE 10และใหม่กว่า
    • Built-in
    • ส่วนหนึ่งของ Java API มาตรฐานพร้อมการใช้งานแบบรวม
    • Java 9 เพิ่มคุณสมบัติและการแก้ไขเล็กน้อย
  • Java SE 6และ Java SE 7
    • มากของการทำงาน java.time จะกลับรังเพลิง Java 6 และ 7 ในThreeTen-ย้ายกลับ
  • Android

โครงการThreeTen-Extraขยาย java.time ด้วยคลาสเพิ่มเติม โปรเจ็กต์นี้เป็นพื้นที่พิสูจน์สำหรับการเพิ่ม java.time ในอนาคต คุณอาจพบว่าการเรียนที่มีประโยชน์บางอย่างที่นี่เช่นInterval, YearWeek, YearQuarterและอื่น ๆ อีกมากมาย



1

เป็นเวลาปปปป - ดด - ดด

String time = new DateTime( yourData ).toString("yyyy-MM-dd");

และไลบรารีของ DateTime คือ:

นำเข้า org.joda.time.DateTime;


และห้องสมุดDateTimeมาจากอะไร? คำตอบเกี่ยวกับ Stack Overflow ควรมีคำอธิบายเนื่องจากไซต์นี้มีจุดมุ่งหมายเพื่อเป็นมากกว่าไลบรารีข้อมูลโค้ด
Basil Bourque

0

คำตอบส่วนใหญ่คือ / ถูกต้อง การปรับเปลี่ยน JAVA API ใหม่สำหรับการจัดการวันที่ทำให้แน่ใจว่าความคลุมเครือบางอย่างก่อนหน้านี้ในการจัดการวันที่ของจาวาจะลดลง

คุณจะได้รับข้อความเลิกใช้งานสำหรับการโทรที่คล้ายกัน

new Date() // deprecated

การเรียกข้างต้นทำให้ผู้พัฒนาสันนิษฐานว่าวัตถุ Date ใหม่จะให้วัตถุ Date ที่มีการประทับเวลาปัจจุบัน ลักษณะการทำงานนี้ไม่สอดคล้องกันในคลาส Java API อื่น ๆ

วิธีใหม่ในการดำเนินการนี้คือการใช้อินสแตนซ์ปฏิทิน

new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()

ที่นี่เช่นกันหลักการตั้งชื่อไม่สมบูรณ์แบบ แต่มีการจัดระเบียบมาก สำหรับคนอย่างฉันที่มีช่วงเวลาที่ยากลำบากในการหลอกลวง แต่จะไม่มีวันลืมบางสิ่งหากฟังดูมีเหตุผลนี่เป็นแนวทางที่ดี

สิ่งนี้มีความหมายเหมือนกันกับชีวิตจริง

  1. เราได้รับวัตถุปฏิทินและเรามองหาเวลาในนั้น (คุณต้องสงสัยว่าไม่มีร่างกายได้รับเวลาจากปฏิทินนั่นคือเหตุผลที่ฉันบอกว่ามันไม่สมบูรณ์แบบ แต่นั่นเป็นหัวข้อที่แตกต่างกันโดยสิ้นเชิง)
  2. จากนั้นเราต้องการวันที่ในรูปแบบ Text อย่างง่ายดังนั้นเราจึงใช้คลาสยูทิลิตี้ SimpleDateFormat ซึ่งช่วยเราในการจัดรูปแบบวันที่จากขั้นตอนที่ 1 ฉันใช้ yyyy, MM, dd เป็นพารามิเตอร์ในรูปแบบ พารามิเตอร์รูปแบบวันที่ที่รองรับ

อีกวิธีหนึ่งในการทำเช่นนี้คือการใช้ Joda time API

new DateTime().toString("yyyy-MM-dd")

หรือที่ชัดเจนมาก

new DateTime(Calendar.getInstance().getTime()).toString("yyyy-MM-dd")

ทั้งสองจะให้ผลลัพธ์เหมือนกัน


FYI, ลำบากเก่าชั้นเรียนวันที่เวลาเช่นjava.util.Date, java.util.Calendarและjava.text.SimpleTextFormatตอนนี้มรดกแทนที่โดยjava.timeชั้นเรียน นอกจากนี้โปรเจ็กต์Joda-Timeยังอยู่ในโหมดการบำรุงรักษาโดยทีมงานจะให้คำแนะนำในการย้ายข้อมูลไปที่ java.time
Basil Bourque

1
@BasilBourque นั่นคือสิ่งที่ฉันหมายถึงในคำตอบของฉันคำตอบที่ได้รับการโหวตสูงสุดนั้นถูกต้อง แต่ไม่เกี่ยวข้องกับนักพัฒนาในยุคปัจจุบัน ในที่สุด java จะมีคลาส Clock และ Clock.getTime () จะมีความสมเหตุสมผลและเลียนแบบชีวิตจริงได้ดีกว่าคลาส Date หรือ DateTime หรือ Time นักพัฒนา Java จำเป็นต้องทราบว่า OOPS เริ่มต้นจากสิ่งที่เลียนแบบสถานการณ์ในชีวิตจริง
Swapnil Vargaonkar

FYI การClockใช้งานใน Java 8 นั้นเหมือนกับคลาสดั้งเดิมทุกประการ เฉพาะใน Java 9 เท่านั้นที่มีการนำไปใช้งานใหม่ซึ่งสามารถจับภาพช่วงเวลาปัจจุบันด้วยความละเอียดได้ดีถึงนาโนวินาที
Basil Bourque

ใช่นั่นคือเหตุผลที่ฉันเขียน "ในที่สุด" Java จะมีคลาสนาฬิกาซึ่งจะเลียนแบบสถานการณ์ในชีวิตจริง (แนวคิด OOPS) และแสดง / จับภาพ (วิธีที่คุณต้องการพูด) ในช่วงเวลาปัจจุบัน
Swapnil Vargaonkar

-2
public static Date getDateByString(String dateTime) {
        if(dateTime==null || dateTime.isEmpty()) {
            return null;
        }
        else{
            String modified = dateTime + ".000+0000";
            DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
            Date dateObj = new Date();
            Date dateObj1 = new Date();
            try {
                if (dateTime != null) {
                    dateObj = formatter.parse(modified);
                }

            } catch (ParseException e) {
                e.printStackTrace();
            }

            return dateObj;
        }

    }

1
คำอธิบายบางอย่างเกี่ยวกับโค้ดชิ้นนี้อาจเป็นประโยชน์
Pyves

1
คำตอบไม่เกี่ยวข้องกับคำถาม และไม่คุณไม่สามารถส่งวันที่ในStringรูปแบบใดก็ได้ไปยังฟังก์ชันของคุณ
เยรินโจเซฟ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.