【问题标题】:How to get current date and time in Android?如何在 Android 中获取当前日期和时间?
【发布时间】:2014-11-12 05:42:28
【问题描述】:

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 个问题中我了解到,要获取日期和时间,我们需要使用日历。我已经访问过它的文档页面,但这太难理解了。

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

我只知道到这里:

Calendar c = Calendar.getInstance();

现在我该怎么办?

【问题讨论】:

标签: android


【解决方案1】:

您可以自定义您想要使用的格式

DateFormat df = new SimpleDateFormat("dd MM yyyy, HH:mm");
String date = df.format(Calendar.getInstance().getTime());

【讨论】:

    【解决方案2】:
        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);
    

    【讨论】:

    • 仅供参考,java.util.Datejava.util.Calendarjava.text.SimpleDateFormat 等麻烦的日期时间类现在已被 java.time 类所取代。大多数 java.time 功能在 ThreeTen-Backport 项目中被反向移植到 Java 6 和 Java 7。进一步适用于ThreeTenABP 中的早期 Android (How to use ThreeTenABP…
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:
          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);
      

      【讨论】:

        【解决方案5】:

        tl;博士

        我想获取当前日期,即 12,当前月份,即 11 月,当前年份,即 2014 年以及小时、分钟,而不是秒以及 AM 或 PM。

        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

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

        不。

        Calendar 类很糟糕,还有 DateSimpleDateFormat 等。这些类都在几年前被 JSR 310 中定义的现代 java.time 类所取代。

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

        确定日期和时间需要时区。对于任何给定的时刻,日期在全球范围内因区域而异。例如,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 IST

        看到这个code run live at IdeOne.com



        关于java.time

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

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

        Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

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

        从哪里获得 java.time 类?

        【讨论】:

        【解决方案6】:
        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);
        

        【讨论】:

        • 我想要部分日期和时间。 int 中的当前日期,String 中的月份名称,int 中的年份,int 中的小时和分钟以及 String 中的 AM 或 PM。
        • 在我上面的答案中更改提供给 SimpleDateFormat 的参数并获取整数使用 Integer.parseInt(string) 将您需要的参数转换为整数
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-01
        • 1970-01-01
        • 2018-09-26
        • 2010-10-03
        • 2019-08-13
        • 2017-10-05
        相关资源
        最近更新 更多