ฉันจะรับวันที่ปัจจุบันใน Android ได้อย่างไร


165

ฉันเขียนรหัสต่อไปนี้

Date d = new Date();
CharSequence s  = DateFormat.format("MMMM d, yyyy ", d.getTime());

แต่ขอพารามิเตอร์ฉันฉันต้องการวันที่ปัจจุบันในรูปแบบสตริง

ชอบ

28-Dec-2011

เพื่อที่ฉันสามารถตั้งTextView,

อธิบายหน่อยถ้าคุณคิดว่าจำเป็นต้องใช้บางสิ่งฉันเป็นคนใหม่ในการพัฒนา Android


1
ในขณะที่ใช้DateFormatคลาสนั้นก็โอเคเมื่อคำถามนี้ถูกถามในปี 2011 คลาสนั้นและคลาสย่อยSimpleDateFormatนั้นมีปัญหาเสมอและตอนนี้ล้าสมัยไปแล้ว ผมขอแนะนำให้คุณไม่ได้ใช้พวกเขาและแทนที่จะมองเข้าไปในjava.time ทันสมัย Java วันที่และเวลา API
Ole VV

คำตอบ:


389

คุณสามารถใช้SimpleDateFormatคลาสสำหรับการจัดรูปแบบวันที่ในรูปแบบที่คุณต้องการ

เพียงตรวจสอบลิงค์นี้ที่คุณได้รับความคิดสำหรับตัวอย่างของคุณ

ตัวอย่างเช่น:

String dateStr = "04/05/2010"; 
 
SimpleDateFormat curFormater = new SimpleDateFormat("dd/MM/yyyy"); 
Date dateObj = curFormater.parse(dateStr); 
SimpleDateFormat postFormater = new SimpleDateFormat("MMMM dd, yyyy"); 
 
String newDateStr = postFormater.format(dateObj); 

ปรับปรุง:

ตัวอย่างรายละเอียดอยู่ที่นี่ฉันขอแนะนำให้คุณดูตัวอย่างนี้และทำความเข้าใจแนวคิดของ SimpleDateFormat class

ทางออกสุดท้าย:

Date c = Calendar.getInstance().getTime();
System.out.println("Current time => " + c);

SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy", Locale.getDefault());
String formattedDate = df.format(c);

คุณอาจต้องการใช้เมธอด System.currentTimeMillis () หรือคลาส Data แทนคลาส Calendar ควรจะเร็วกว่า stackoverflow.com/questions/368094/…
cjayem13

ต้องใช้ API 24!
ueen

FYI, ลำบากชะมัดเรียนวันที่เวลาเช่นjava.util.Date, java.util.Calendarและjava.text.SimpleDateFormatตอนนี้มรดกแทนที่โดยjava.timeชั้นเรียนที่สร้างขึ้นใน Java 8 และต่อมา ดูการสอนโดยออราเคิล
Basil Bourque

@ueen โปรดนำเข้าจากแพคเกจ java ไม่ใช่จาก Android
Sadda Hussain

ทำงานได้ดี ปัจจุบัน? (2020)
คข้าม

152

รหัสบรรทัดเดียวง่ายๆสำหรับรับวันที่ปัจจุบันในรูปแบบyyyy-MM-dd นี้คุณสามารถใช้รูปแบบที่คุณต้องการ:

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

7
คุณควรเปลี่ยนเป็น: String currentDate = new SimpleDateFormat ("dd-MM-yyyy", Locale.getDefault ()) รูปแบบ (วันที่ใหม่ ());
Bart Burg

1
ว้าวขอบคุณ! สิ่งนี้ได้ผลแม้ว่าฉันจะเชื่อว่าฉันอาจพบว่าทำไมวันที่บนอุปกรณ์เสมือนของฉันจึงแสดงหนึ่งวันก่อนอาจเป็นเพราะวันที่บนเครื่องเสมือนไม่ถูกต้อง เมื่อทดสอบกับโทรศัพท์จริงมันทำงานได้อย่างมหัศจรรย์ ดังนั้นขอบคุณ @Pratik
wesley

30

นี่ไม่เกี่ยวอะไรกับ android เพราะมันใช้จาวาเพื่อให้คุณสามารถใช้งานได้

private String getDateTime() { 
   DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
   Date date = new Date(); 
   return dateFormat.format(date); 
}

มีข้อผิดพลาด Date ใหม่ () กำลังขอข้อโต้แย้งและคุณกำลังเริ่มต้น DateFormat ด้วย SimpleDateFormat แต่ก็ไม่ถูกต้อง
Chatar Veer Suthar


11

ลองนี้

SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyyMMddHHmmssSS");
Date myDate = new Date();
String filename = timeStampFormat.format(myDate);

มันบอกว่าเพิ่มข้อโต้แย้งไปยังวันที่ใหม่ (ยาว)
Chatar Veer Suthar

ในวันที่ใหม่ () ก็ไม่สามารถถามพารามิเตอร์ยาว
ลูซิเฟอร์

ทำไมคุณถึงใช้คีย์เวิร์คส่วนตัวเรียกใช้โค้ดของคุณในโปรเจค Android คุณจะได้ผลลัพธ์หรือไม่?
Chatar Veer Suthar

โปรดลบ "ส่วนตัว" ออก ใช่ฉันได้รับผลลัพธ์ฉันเห็นการสนทนาของคุณ ฉันไม่รู้ว่าทำไมคุณถึงมีปัญหาสำหรับคำถามง่ายๆ
ลูซิเฟอร์

7
CharSequence s  = DateFormat.getDateInstance().format("MMMM d, yyyy ");

คุณต้องการอินสแตนซ์ก่อน


getDateInstance ไม่รู้จักสิ่งนี้
Chatar Veer Suthar

ถ้าคุณดูจาวา docs มันควรจะเป็นdocs.oracle.com/javase/6/docs/api/java/text/… , java.util.Locale)
Marthyn Olthof

@Veer หากคุณนำเข้า android.text.format.DateFormat แทน java.text.DateFormat โดยไม่ตั้งใจ getDateInstance () จะไม่ถูกจดจำ
gcbound

7

ใช้งานได้อย่างมีเสน่ห์และแปลงเป็นสตริงเป็นโบนัส;)

SimpleDateFormat currentDate = new SimpleDateFormat("dd/MM/yyyy");
      Date todayDate = new Date();
    String thisDate = currentDate.format(todayDate);




4

ฉันกำลังให้คำตอบที่ทันสมัย

java.time และ ThreeTenABP

วิธีรับวันที่ปัจจุบัน:

    LocalDate today = LocalDate.now(ZoneId.of("America/Hermosillo"));

สิ่งนี้จะให้LocalDateวัตถุซึ่งเป็นสิ่งที่คุณควรใช้เพื่อเก็บวันที่ในโปรแกรมของคุณ A LocalDateคือวันที่ไม่มีเวลา

เมื่อคุณต้องการที่จะแสดงวันที่ให้กับผู้ใช้จัดรูปแบบลงในสตริงที่เหมาะสมสำหรับสถานที่ของผู้ใช้:

    DateTimeFormatter userFormatter
            = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
    System.out.println(today.format(userFormatter));

เมื่อฉันวิ่งตัวอย่างนี้วันนี้ในภาษาอังกฤษของสหรัฐอเมริกาผลลัพธ์คือ:

13 กรกฎาคม 2019

หากคุณต้องการให้มันสั้นระบุหรือแม้กระทั่งFormatStyle.MEDIUM ใช้สถานที่จัดรูปแบบเริ่มต้นดังนั้นประเด็นก็คือมันจะให้ผลลัพธ์ที่เหมาะสมสำหรับสถานที่ที่แตกต่างกันสำหรับสถานที่ที่แตกต่างกันFormatStyle.SHORTDateTimeFormatter.ofLocalizedDate

หากผู้ใช้ของคุณมีข้อกำหนดพิเศษมากสำหรับรูปแบบผลลัพธ์ให้ใช้สตริงรูปแบบรูปแบบ:

    DateTimeFormatter userFormatter = DateTimeFormatter.ofPattern(
            "d-MMM-u", Locale.forLanguageTag("ar-AE"));

13 يول -2019

ฉันใช้และแนะนำ java.time ซึ่งเป็น API วันที่และเวลาของ Java สมัยใหม่ DateFormat, SimpleDateFormat, DateและCalendarใช้ในคำถามที่ล้าสมัยและ / หรือหลายคำตอบอื่น ๆ ได้รับการออกแบบมาไม่ดีและระยะยาว และ java.time นั้นดีกว่ามากในการใช้งาน

คำถาม: ฉันสามารถใช้ java.time บน Android ได้หรือไม่

ใช่ java.time ทำงานได้ดีบนอุปกรณ์ Android รุ่นเก่าและใหม่กว่า มันก็ต้องมีอย่างน้อยJava 6

  • ใน Java 8 และใหม่กว่าและบนอุปกรณ์ Android รุ่นใหม่ (จาก API ระดับ 26) API ที่ทันสมัยนั้นมีมาให้ในตัว
  • ใน Java 6 และ 7 จะได้รับ ThreeTen Backport ซึ่งเป็น backport ของคลาสที่ทันสมัย ​​(ThreeTen สำหรับ JSR 310 ดูลิงค์ที่ด้านล่าง)
  • บน (เก่า) Android ใช้ Android รุ่น ThreeTen Backport มันเรียกว่า ThreeTenABP และตรวจสอบให้แน่ใจว่าคุณได้อิมพอร์ตคลาสวันที่และเวลาจากorg.threeten.bpด้วยแพ็กเกจย่อย

การเชื่อมโยง


คำตอบที่ดีมาก! แต่ฉันจะแปลง ThreeTen LocalDateTime เป็น Date ได้อย่างไร ฉันใช้ Firebase และข้อกำหนดเบื้องต้นสำหรับการบันทึกเวลาเป็นวัตถุวันที่
H.Karatsanov

@ H.Karatsanov DateTimeUtils.toDate(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant())ถ้าใช้ย้ายกลับไปนี้: หากมีการใช้ในตัว Date.from(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant())java.time: ดูแปลงระหว่าง java.time.LocalDateTime และ java.util.Date คำตอบเผด็จการโดย JodaStephen มีและยังมีคำตอบที่แสดงให้เห็นการใช้งานของย้ายกลับที่
Ole VV

4
 public static String getcurrentDateAndTime(){

        Date c = Calendar.getInstance().getTime();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
        String formattedDate = simpleDateFormat.format(c);
        return formattedDate;
    }

// String currentdate=  getcurrentDateAndTime();

มันมีส่วนร่วมกับคำถามมากมายหรือไม่ ( ฉันต้องการวันที่ปัจจุบันในรูปแบบสตริงเช่น28-Dec-2011 ) ที่ไม่ได้มีอยู่ในคำตอบอื่น ๆ หรือไม่? ไม่ว่าในกรณีใดก็ตามมันยังคงใช้SimpleDateFormatคลาสที่ล้าสมัยและมีปัญหาอย่างฉาวโฉ่ ได้โปรดเราไม่ต้องการคำตอบอีกแล้ว
Ole VV

มันใช้งานได้ดีที่สุดเพื่อเพิ่มแนวปฏิบัติพารามิเตอร์ที่สอง SimpleDateFormat simpleDateFormat = SimpleDateFormat ใหม่ ("yyyy / MM / dd", Locale.ENGLISH);
Rucha Bhatt Joshi

3
Calendar cal = Calendar.getInstance();      
Calendar dt = Calendar.getInstance(); 
dt.clear();
dt.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),cal.get(Calendar.DATE)); 
return dt.getTime();        

3

ปรับแต่งง่าย ๆ กับวิธีแก้ปัญหาของ Paresh:

Date date = Calendar.getInstance().getTime();
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = df.format(date);

3
Calendar c = Calendar.getInstance();
int day = c.get(Calendar.DAY_OF_MONTH);
int month = c.get(Calendar.MONTH);
int year = c.get(Calendar.YEAR);
String date = day + "/" + (month + 1) + "/" + year;

Log.i("TAG", "--->" + date);

2

คุณสามารถใช้รหัสต่อไปนี้เพื่อรับวันที่ในรูปแบบที่คุณต้องการ

String date = String.valueOf(android.text.format.DateFormat.format("dd-MM-yyyy", new java.util.Date()));

Nice one liner และทำงานบน Sdks ที่ต่ำกว่า อักขระสองสามตัวที่สั้นกว่า DateFormat.format ("dd-MM-yyyy", java.util.Date ()) ใหม่ toString ()
เจฟฟรีย์

1
Date c = Calendar.getInstance().getTime();
System.out.println("Current time => " + c);

SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = df.format(c);

อันนี้เป็นคำตอบที่ดีที่สุด ...


0

วิธีที่ง่ายที่สุดในการรับวันที่ปัจจุบันในสถานที่ปัจจุบัน (ตำแหน่งที่ตั้งของอุปกรณ์!):

String currentDate = DateFormat.getDateInstance().format(Calendar.getInstance().getTime());

หากคุณต้องการให้มีวันที่ในรูปแบบที่แตกต่างกันให้ใช้getDateInstance(int style):

DateFormat.getDateInstance(DateFormat.FULL).format(Calendar.getInstance().getTime());

รูปแบบอื่น ๆ : DateFormat.LONG, DateFormat.DATE_FIELD, DateFormat.DAY_OF_YEAR_FIELDฯลฯ (การใช้งานCTRL+Spaceเพื่อดูทั้งหมดของพวกเขา)

หากคุณต้องการเวลาด้วย:

String currentDateTime = DateFormat.getDateTimeInstance(DateFormat.DEFAULT,DateFormat.LONG).format(Calendar.getInstance().getTime());

0
  public static String getDateTime() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMMM dd, yyyy HH:mm:ss", Locale.getDefault());
        Date date = new Date();
        return simpleDateFormat.format(date);
    }

0

ลองกับลิงค์ของรหัสนี้เป็นคำตอบที่ถูกต้องแน่นอนสำหรับทุกกรณีตลอดทั้งวันและเวลา หรือปรับแต่งวันที่และเวลาตามความต้องการและความต้องการของแอพ

ลองกับลิงค์นี้ ลองกับลิงค์นี้


0

ฉันเขียนแอพปฏิทินโดยใช้ CalendarView และเป็นรหัสของฉัน:

CalendarView cal = (CalendarView) findViewById(R.id.calendar);
cal.setDate(new Date().getTime());

ฟิลด์ 'ปฏิทิน' คือมุมมองปฏิทินของฉัน การนำเข้า:

import android.widget.CalendarView;
import java.util.Date;

ฉันมีวันที่ปัจจุบันโดยไม่มีข้อผิดพลาด


0

นี่คือรหัสที่ฉันใช้:

             Date date = new Date();  // to get the date
             SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy"); // getting date in this format
             String formattedDate = df.format(date.getTime());
             text.setText(formattedDate);

0

ฉันใช้สิ่งนี้แล้ว:

Date What_Is_Today=Calendar.getInstance().getTime();
SimpleDateFormat Dateformat = new SimpleDateFormat("dd-MM-yyyy");
String Today=Dateformatf.format(What_Is_Today);

Toast.makeText(this,Today,Toast.LENGTH_LONG).show();

ตอนแรกฉันได้รับเวลาจากนั้นฉันประกาศรูปแบบวันที่อย่างง่าย (เพื่อรับวันที่ชอบ: 19-6-2018) จากนั้นฉันใช้รูปแบบเพื่อเปลี่ยนวันที่เป็นสตริง


0

รหัสบรรทัดเดียวเพื่อให้ได้รูปแบบวันที่ที่เรียบง่าย:

SimpleDateFormat.getDateInstance().format(Date())

ผลลัพธ์: 18 พฤษภาคม -2063

SimpleDateFormat.getDateTimeInstance().format(Date())

ผลผลิต: 18 พฤษภาคม 2563 11:00:39 น

SimpleDateFormat.getTimeInstance().format(Date())

เอาท์พุท: 11:00:39 น

หวังว่าคำตอบนี้เพียงพอที่จะรับรูปแบบวันที่และเวลา ... :)


กรุณาอย่าสอนให้คนหนุ่มสาวที่จะใช้เวลานานและล้าสมัยฉาวโฉ่ลำบากSimpleDateFormatและDateFormatชั้นเรียน อย่างน้อยก็ไม่ใช่ตัวเลือกแรก และไม่ได้โดยไม่ต้องจองใด ๆ วันนี้เรามีมากดีกว่าในการjava.timeที่ทันสมัย Java วันที่และเวลา API,DateTimeFormatterและ ใช่คุณสามารถใช้มันบน Android สำหรับ Android เก่าดูวิธีการใช้ ThreeTenABP ในโครงการ
Ole VV

-1

นี่คือรหัสที่ฉันใช้ :

final Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);

// Set current date into textview
tvDisplayDate.setText(new StringBuilder()
    .append(month + 1).append("-") // Month is 0 based, add 1
    .append(day).append("-")
    .append(year).append("   Today is :" + thursday ) );

// Set current date into datepicker
dpResult.init(year, month, day, null);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.