如何在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

Answers:


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类的概念。

最终解决方案:

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

仅供参考,非常麻烦的日期,时间类,如java.util.Datejava.util.Calendarjava.text.SimpleDateFormat现在的遗产,由取代java.time内置到Java 8和更高等级。请参见Oracle 教程
罗勒·布尔克

@ueen请从Java包而不是从android导入。
萨达·侯赛因

工程罚款?目前?(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())。format(new Date());
巴特·伯格

1
哇谢谢你!尽管我相信我可能已经发现了为什么虚拟设备上的日期显示为前一天的原因,但这确实可行,这可能是因为虚拟机上的日期不正确。当在实际的电话上进行测试时,它产生了奇迹。所以,谢谢你@Pratik
韦斯利弗兰克斯

30

这与android无关,因为它基于Java,因此您可以使用

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

有错误,新的Date()要求提供参数,并且您正在使用SimpleDateFormat初始化DateFormat,这也是无效的
Chatar Veer Suthar 2011年

12
 public String giveDate() {
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("EEE, MMM d, yyyy");
    return sdf.format(cal.getTime());
 }

11

试试这个,

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

这是说添加参数到新的Date(long)
Chatar Veer Suthar

在新的Date()中,它不能询问long参数。
路西法

为什么您使用私有键盘,在android项目中运行代码,得到输出?
Chatar Veer Suthar,2011年

请删除该“私人”。是的,我得到了输出,我正在看您的讨论。我不知道为什么您会因为非常简单的问题而遇到问题。
路西法


7

像吊饰一样工作,并转换为String作为奖励;)

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

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

//将Date类导入为java.util



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

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(现代Java日期和时间API)。DateFormat,和SimpleDateFormatDate以及Calendar在问题和/或许多其他答案中使用的,设计不当,且已过时。而且java.time更好用。

问题:我可以在Android上使用java.time吗?

是的,java.time在旧的和更新的Android设备上都能很好地工作。它至少需要Java 6

  • 在Java 8和更高版本以及更新的Android设备(来自API级别26)中,内置了现代API。
  • 在Java 6和7中,获取ThreeTen Backport,这是现代类的backport(JSR 310的ThreeTen;请参见底部的链接)。
  • 在较旧的Android上,请使用Android版本的ThreeTen Backport。它称为ThreeTenABP。并确保您导入org.threeten.bp带有子包的日期和时间类。

链接


很好的答案!但是,如何将ThreeTen LocalDateTime转换为Date?我正在使用Firebase,保存时间戳的前提是Date对象。
H.Karatsanov

@ H.Karatsanov如果使用反向端口:DateTimeUtils.toDate(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant())。如果使用内置java.time: Date.from(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant())。请参见在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

为了最佳实践,它添加了第二个参数locale SimpleDateFormat simpleDateFormat = new 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()));

不错的一支衬板,可在较低的SDK上使用。短几个字符DateFormat.format(“ dd-MM-yyyy”,新的java.util.Date())。toString()
Jeffrey

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.LONGDateFormat.DATE_FIELDDateFormat.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());

“日历”字段是我的CalendarView。进口:

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),然后使用format将日期更改为字符串。


0

只需一行代码即可获得简单的Date格式:

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

产出:2020年5月18日

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

输出:2020年5月18日11:00:39 AM

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

输出:11 : 00 : 39 AM

希望此答案足以获取此日期和时间格式... :)


请不要教年轻的使用早已过时的和臭名昭著的麻烦SimpleDateFormatDateFormat类。至少不是第一选择。也并非毫无保留。今天,我们在java.timeJava的现代日期和时间API及其上有了很多改进DateTimeFormatter。是的,您可以在Android上使用它。对于较旧的Android,请参见如何在Android Project中使用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);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.