如何在Android中获取当前日期和时间?

时间:2014-11-12 05:42:28

标签: android

StackOverflow上有很多这样的问题,但没有人能得到我需要的答案。我看过这三个问题:

Get Value Of Day Month form Date Object in Android?
How to get month and day in android?
Get current time and date on Android

从这3个问题中我了解到,要获得日期和时间,我们需要使用日历。我访问了它的文档页面,但这太难理解了。

现在我的问题是我希望得到当天,即当月,即11月,当前年份,即2014年和小时,分钟,非秒和上午或下午。

直到这里我才知道:

Calendar c = Calendar.getInstance();

现在我该怎么做?

6 个答案:

答案 0 :(得分:15)

您可以使用

自定义所需的格式
DateFormat df = new SimpleDateFormat("dd MM yyyy, HH:mm");
String date = df.format(Calendar.getInstance().getTime());

答案 1 :(得分:8)

    Calendar calander = Calendar.getInstance(); 
    cDay = calander.get(Calendar.DAY_OF_MONTH);
    cMonth = calander.get(Calendar.MONTH) + 1;
    cYear = calander.get(Calendar.YEAR);
    selectedMonth = "" + cMonth;
    selectedYear = "" + cYear;
    cHour = calander.get(Calendar.HOUR);
    cMinute = calander.get(Calendar.MINUTE);
    cSecond = calander.get(Calendar.SECOND);

答案 2 :(得分:4)

使用SimpleDateFormat以所需格式获取日期和时间:

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd,MMMM,YYYY hh,mm,a");
String strDate = sdf.format(c.getTime());

答案 3 :(得分:2)

    Calendar localCalendar = Calendar.getInstance(TimeZone.getDefault());
    Date currentTime = localCalendar.getTime();
    int currentDay = localCalendar.get(Calendar.DATE);
    int currentMonth = localCalendar.get(Calendar.MONTH) + 1;
    int currentYear = localCalendar.get(Calendar.YEAR);
    int currentDayOfWeek = localCalendar.get(Calendar.DAY_OF_WEEK);
    int currentDayOfMonth = localCalendar.get(Calendar.DAY_OF_MONTH);
    int CurrentDayOfYear = localCalendar.get(Calendar.DAY_OF_YEAR);

    System.out.println("Current Date and time details in local timezone");
    System.out.println("Current Date: " + currentTime);
    System.out.println("Current Day: " + currentDay);
    System.out.println("Current Month: " + currentMonth);
    System.out.println("Current Year: " + currentYear);
    System.out.println("Current Day of Week: " + currentDayOfWeek);
    System.out.println("Current Day of Month: " + currentDayOfMonth);
    System.out.println("Current Day of Year: " + CurrentDayOfYear);

答案 4 :(得分:1)

tl; dr

  

我想获取当前日期,即12,当前月份,即11月,当前年份,即2014,以及小时,分钟,而非秒和上午或下午。

ZonedDateTime
.now( 
    ZoneId.of( "Pacific/Auckland" )    // Or "Asia/India", "Africa/Tunis", etc.
)
.format(
    DateTimeFormatter
    .ofPattern(
        "dd MMMM uuuu HH:mm" 
    )
    .withLocale( 
        Locale.CANADA_FRENCH           // Or `Locale.US`, or `new Locale( "en" , "IN" )` for English language with India culture.
    )
)

请参阅此code run live at IdeOne.com

  

2019年9月28日08:48

java.time

  

从这三个问题中,我了解到要获取日期和时间,我们需要使用日历。

不。

Calendar类以及DateSimpleDateFormat等都是可怕的。这些类都在多年前被JSR 310中定义的现代 java.time 类所取代。

  

现在我的问题是我想获取当前日期(即12月),当前月份(即11月),当前年份(即2014年)以及小时,分钟,而不是秒和上午或下午。

确定日期和时间需要一个时区。在任何给定时刻,日期都会在全球范围内变化。例如,Paris France午夜之后的几分钟是新的一天,而Montréal Québec仍然是“昨天”。

如果未指定时区,则JVM隐式应用其当前的默认时区。该默认值可能在运行时(!)期间change at any moment,因此您的结果可能会有所不同。最好将您的期望/期望时区明确指定为参数。如果要依赖JVM的当前默认时区,请致电ZoneId.systemDefault()来表明您的意图。如果紧急,请与您的用户确认区域。

Continent/Region的格式指定proper time zone name,例如America/MontrealAfrica/CasablancaPacific/Auckland。切勿使用2-4个字母的缩写,例如ESTIST,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;  

从某个地区(某个时区)的人们使用的挂钟时间中捕获当前时刻。

ZonedDateTime zdt = ZonedDateTime.now( z ) ;

如果您不在乎秒或小数秒,请截断。

ZonedDateTime zdt = ZonedDateTime.now( z ).truncatedTo( ChronoUnit.MINUTES ) ;

生成标准ISO 8601格式的字符串,明智地扩展以将时区的名称附加在方括号中。

String output = zdt.toString() ;
  

2019-09-28T01:42 + 05:30 [亚洲/加尔各答]

生成自动本地化的字符串。

Locale locale = new Locale( "en" , "IN" ) ;  // English language, India culture.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.LONG ).withLocale( locale ) ;
String output2 = zdt.format( f ) ;
  

2019年9月28日美国标准时间上午1:42:00

请参阅此code run live at IdeOne.com


Table of date-time types in Java, both modern and legacy


关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

目前位于Joda-Timemaintenance mode项目建议迁移到java.time类。

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

在哪里获取java.time类?

Table of which java.time library to use with which version of Java or Android

答案 5 :(得分:0)

public class XYZ extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.main);

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

    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String formattedDate = df.format(c.getTime());
    // formattedDate have current date/time
    Toast.makeText(this, formattedDate, Toast.LENGTH_SHORT).show();


  // Now we display formattedDate value in TextView
    TextView txtView = new TextView(this);
    txtView.setText("Current Date and Time : "+formattedDate);
    txtView.setGravity(Gravity.CENTER);
    txtView.setTextSize(20);
    setContentView(txtView);
  }

 }


Calendar calander = Calendar.getInstance(); 
cDay = calander.get(Calendar.DAY_OF_MONTH);
cMonth = calander.get(Calendar.MONTH) + 1;
cYear = calander.get(Calendar.YEAR);
selectedMonth = "" + cMonth;
selectedYear = "" + cYear;
cHour = calander.get(Calendar.HOUR);
cMinute = calander.get(Calendar.MINUTE);
cSecond = calander.get(Calendar.SECOND);