如何在Android中使用DateFormat.getDateTimeInstance()仅显示当前时间

6

我是一名 Android 新手。我想在 TextView 中以 hh:mm am/pm (例如:3:02 PM) 的格式仅显示当前时间。我使用以下代码。

String currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date()); tv.setText(currentDateTimeString);

它给出了当前日期、月份、年份和时间。但是我只需要获取当前的时间。有没有办法仅显示时间?谁能帮我从上述代码中获取无日期的时间 [使用 DateFormat.getDateTimeInstance()]


你想将当前时间显示在文本视图还是编辑框中? - Mohammod Hossain
6个回答

9

请尝试以下代码

     Date d=new Date();
     SimpleDateFormat sdf=new SimpleDateFormat("hh:mm a");
     String currentDateTimeString = sdf.format(d);
     tv.setText(currentDateTimeString);

是的,这正是我需要的。谢谢。 - liya
这是24小时制还是12小时制? - MichaelStoddart
2
12小时制...这就是我使用“a”表示上午/下午的原因。 - Ketan Ahir

8

它提供了当前的日期、月份、年份和时间,但我只需要获取当前时间。

如果您想这样做并且尊重用户的偏好(例如12小时制与24小时制),那么继续使用DateFormat,只需像这样:

DateFormat.getTimeInstance(DateFormat.SHORT).format(new Date());

1
抱歉,我误操作将此答案点踩了。实际上,这是唯一正确的答案。 - AlexeyVMP
1
@AlexeyVMP 谢谢,我已经编辑过了,现在你应该可以取消踩或赞了。 - weston
这应该是被接受的答案!感谢分享。 - Sam

1

try this:

<DigitalClock
        android:id="@+id/digitalClock1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="DigitalClock" />

这是关于Android基本控制的内容。

0
它提供了当前的日期、月份、年份和时间。但我只需要从中获取当前时间。 java.util.Date 对象不像 现代日期时间类型 一样是真正的日期时间对象;相反,它表示自“纪元”以来的毫秒数,即 1970 年 1 月 1 日 00:00:00 GMT(或 UTC)的标准基准时间。当您打印 java.util.Date 对象时,它的 toString 方法会返回 JVM 时区中计算出的日期时间。如果您需要在不同的时区打印日期时间,则需要将时区设置为 SimpleDateFormat 并从中获取格式化字符串。
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.ENGLISH);
sdf.setTimeZone(TimeZone.getTimeZone("America/New_York"));
System.out.println(sdf.format(date));

为了仅获取时间,您只需要将(a) yyyy-MM-dd'T'HH:mm:ss.SSSXXX 替换为 hh:mm a,并将(b) America/New_York 替换为适用的时区。
然而,java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用它们,并切换到现代日期时间 API*
使用现代 API java.time 的解决方案:
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        // Replace JVM's timezone i.e. ZoneId.systemDefault() with the applicable
        // timezone e.g. ZoneId.of("Europe/London")
        LocalTime time = LocalTime.now(ZoneId.systemDefault());

        // Print the default format i.e. the value of time.toString()
        System.out.println(time);

        // Custom format
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH);
        String formattedTime = dtf.format(time); // Alternatively, time.format(dtf)
        System.out.println(formattedTime);
    }
}

输出:

11:59:07.443868
11:59 AM

了解更多关于java.time现代日期时间API*请参考教程:日期时间


* 如有任何原因,您必须坚持使用Java 6或Java 7,您可以使用ThreeTen-Backport将大多数java.time功能回溯到Java 6和7。如果您正在为Android项目工作,并且您的Android API级别仍不符合Java-8,请查看 通过去糖化可用的Java 8+ API如何在Android项目中使用ThreeTenABP


0
 startTime = ""+System.currentTimeMillis();
                    StringTokenizer tk = new StringTokenizer(startTime.trim());
                    String date = tk.nextToken();  
                    String time = tk.nextToken();

                    SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
                    SimpleDateFormat sdfs = new SimpleDateFormat("hh:mm a");
                    Date dt;
                    try {    
                        dt = sdf.parse(time);
                        System.out.println("Time Display: " + sdfs.format(dt)); // <-- I got result here
                    } catch (ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接