ChatGPT解决这个技术问题 Extra ChatGPT

Android获取当前时间戳?

我想得到这样的当前时间戳:1320917972

int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts =  tsTemp.toString();
仅供参考,麻烦的旧日期时间类(例如 java.util.Datejava.util.CalendarTimestamp)现在已被 java.time 类取代。大部分 java.time 功能都向后移植到 Java 6 & ThreeTen-Backport 项目中的 Java 7。在 ThreeTenABP 项目中进一步适用于早期的 Android。见How to use ThreeTenABP…

R
Rjaibi Mejdi

解决方案是:

Long tsLong = System.currentTimeMillis()/1000;
String ts = tsLong.toString();

这不考虑设备的时区偏移量。
@kjdion84 对不起,但你为什么认为这很重要?只是基于这个问题。
有没有办法把它作为int
T
Trung Nguyen

来自开发者博客:

System.currentTimeMillis() 是标准的“挂钟”(时间和日期),表示自纪元以来的毫秒数。挂钟可由用户或电话网络设置(参见setCurrentTimeMillis(long)),因此时间可能会意外地向后或向前跳跃。仅当与现实世界的日期和时间的对应关系很重要时才应使用此时钟,例如在日历或闹钟应用程序中。间隔或经过时间测量应使用不同的时钟。如果您使用 System.currentTimeMillis(),请考虑收听 ACTION_TIME_TICKACTION_TIME_CHANGEDACTION_TIMEZONE_CHANGED Intent 广播以了解时间何时更改。


developer.android.com/reference/java/lang/… 我发现 System.nanoTime()System.currentTimeMillis() 的替代品,它没有不可预测的波动,并且专为测量持续时间差异而设计。
@ana01“零值通常是设备最后一次启动的时候” - 所以它只能在您比较同一设备上的持续时间差异时使用。例如,对于数据库存储没有用。
只需注意@ana01 的评论,即 System.nanoTime() 不适合显示挂钟时间。为此,请改用 System.currentTimeMillis()
H
Hocine B

1320917972 是 Unix 时间戳,使用自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数。您可以使用 TimeUnit 类进行单位转换 - 从 System.currentTimeMillis() 到秒。

String timeStamp = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));

P
Pratik Butani

您可以使用 SimpleDateFormat 类:

SimpleDateFormat s = new SimpleDateFormat("ddMMyyyyhhmmss");
String format = s.format(new Date());

这不是时间戳(自纪元以来的时间)
不是时间戳,而且根本没有效率(创建 SimpleDateFormat,创建日期,转换)。躲开它。
您正在回答其他问题,但这也是有效的。
H
Hits

使用以下方法获取当前时间戳。这对我来说可以。

/**
 * 
 * @return yyyy-MM-dd HH:mm:ss formate date as string
 */
public static String getCurrentTimeStamp(){
    try {

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String currentDateTime = dateFormat.format(new Date()); // Find todays date

        return currentDateTime;
    } catch (Exception e) {
        e.printStackTrace();

        return null;
    }
}

那不是时间戳。
@Hits,这是简单的日期格式,而不是时间戳。您只是使用变量名作为 currentTimeStap。
P
Pranav

使用很简单:

long millis = new Date().getTime();

如果你想要它的特定格式,那么你需要像下面这样的 Formatter

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String millisInString  = dateFormat.format(new Date());

这给出了 GMT 时间。
M
Mujahid Khan

您可以通过尝试以下代码在 Android 中获取当前时间戳

time.setText(String.valueOf(System.currentTimeMillis()));

和时间戳到时间格式

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String dateString = formatter.format(new Date(Long.parseLong(time.getText().toString())));
time.setText(dateString);

1
18446744073709551615

这是一个人类可读的时间戳,可以在文件名中使用,以防万一有人需要我需要的东西:

package com.example.xyz;

import android.text.format.Time;

/**
 * Clock utility.
 */
public class Clock {

    /**
     * Get current time in human-readable form.
     * @return current time as a string.
     */
    public static String getNow() {
        Time now = new Time();
        now.setToNow();
        String sTime = now.format("%Y_%m_%d %T");
        return sTime;
    }
    /**
     * Get current time in human-readable form without spaces and special characters.
     * The returned value may be used to compose a file name.
     * @return current time as a string.
     */
    public static String getTimeStamp() {
        Time now = new Time();
        now.setToNow();
        String sTime = now.format("%Y_%m_%d_%H_%M_%S");
        return sTime;
    }

}

嘿,你还能告诉排序时间戳列表的最佳方法吗?我正在考虑自己对它们进行分类,但认为可能有更好的方法。
供阅读本文的任何人参考,请注意“android.text.format.Time”现在已弃用
D
DSavi

Kotlin 中的解决方案:

val nowInEpoch = Instant.now().epochSecond

确保您的最低 SDK 版本为 26。


u
ucMedia

https://i.stack.imgur.com/XKY91.png


O
Ole V.V.

java.time

我想贡献现代答案。

    String ts = String.valueOf(Instant.now().getEpochSecond());
    System.out.println(ts);

刚才运行时的输出:

1543320466

虽然除以 1000 对许多人来说并不令人惊讶,但进行自己的时间转换可能很难很快阅读,所以当你可以避免它时养成一个坏习惯。

我使用的 Instant 类是现代 Java 日期和时间 API java.time 的一部分。它内置在新的 Android 版本、API 级别 26 及更高版本上。如果您正在为较旧的 Android 编程,您可能会获得 backport,见下文。如果您不想这样做,可以理解的是,我仍然会使用内置转换:

    String ts = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
    System.out.println(ts);

这与 sealskej 的回答相同。输出和以前一样。

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

是的,java.time 在较旧和较新的 Android 设备上运行良好。它只需要至少 Java 6。

在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 开始)中,现代 API 是内置的。

在非 Android Java 6 和 7 中,获得 ThreeTen Backport,即新类的后向端口(对于 JSR 310,ThreeTen;请参阅底部的链接)。

在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从带有子包的 org.threeten.bp 导入日期和时间类。

链接

Oracle 教程:日期时间解释如何使用 java.time。

Java 规范请求 (JSR) 310,其中首次描述了 java.time。

ThreeTen Backport 项目,java.time 到 Java 6 和 7 的反向移植(ThreeTen for JSR-310)。

ThreeTenABP,Android 版 ThreeTen Backport

问题:如何在Android Project中使用ThreeTenABP,讲解很透彻。


几乎完美的答案(我赞成)但是,至少在我诚实的意见中,您应该删除 ThreeTen Backport 参考,因为这是一个关于 Android 而不是一般 Java 的问题。对于 Android 的初学者来说,这可能会让人感到困惑。
@SlobodanAntonijević 对于 Android 程序员来说,了解 (a) 如果他们支持 Android 26 及更高版本,他们有一个内置的 java.time 实现,(b) 如果之前支持早期的 Android,这一点很重要26,他们必须添加一个库,ThreeTenABP库,以及(c)如果使用ThreeTenABP,要知道这个库实际上是ThreeTen-Backport< /i> 从 Java 改编为 Android。 ThreeTenABP 库只是围绕 ThreeTen-Backport 库的 Android 特定包装器。请参阅 this table graphic 比较这 3 个库。
@BasilBourque 你是完全正确的。但是,您实际上可以导入 ThreeTen-Backport 并在 Android 应用程序中使用它,但由于其 JAR 依赖关系,对性能的影响非常大。这就是为什么我说这篇文章应该更具体一点,Android 开发人员不应该使用 ThreeTen-Backport,而是使用 ThreeTenABP 来支持 API 25 及以下版本。我在各种板上看到了许多开发人员,他们对应该将哪一个用于 Android 感到困惑,因为它们的名称听起来很相似。
好点,@SlobodanAntonijević。我试图让它更清楚一点。
@SlobodanAntonijević This table 显示在哪里获取 Java 和 Android 的 java.time 可能有助于说明清楚。
N
Notron

这是另一个解决方案,这是在 kotlin 中:

val df: DateFormat = SimpleDateFormat("yyyy.MM.dd HH:mm:ss")
val timeStamp = df.format(Calendar.getInstance().time)

输出示例:

“2022.04.22 10:22:35”


要获得毫秒,只需添加如下模式: SimpleDateFormat("yyyy.MM.dd HH:mm:ss:SSS")
F
Faustino Gagneten

我建议使用 Hits 的答案,但添加区域设置格式,这就是 Android 开发人员recommends的方式:

try {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
        return dateFormat.format(new Date()); // Find todays date
    } catch (Exception e) {
        e.printStackTrace();

        return null;
    }

2
2 revs

此代码是 Kotlin 版本。我还有另一个想法是在最后一位数字中添加一个随机洗牌整数,以提供方差纪元时间。

Kotlin 版本

val randomVariance = (0..100).shuffled().first()
val currentEpoch = (System.currentTimeMilis()/1000) + randomVariance

val deltaEpoch = oldEpoch - currentEpoch

我认为使用这个 kode 会更好,然后依赖于 android 版本 26 或更高版本