281

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

int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts =  tsTemp.toString();
4

13 回答 13

333

解决方案是:

Long tsLong = System.currentTimeMillis()/1000;
String ts = tsLong.toString();
于 2014-08-12T12:45:43.540 回答
86

来自开发者博客:

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

于 2011-11-10T09:43:24.327 回答
38

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

String timeStamp = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
于 2016-06-14T13:02:16.447 回答
32

您可以使用SimpleDateFormat类:

SimpleDateFormat s = new SimpleDateFormat("ddMMyyyyhhmmss");
String format = s.format(new Date());
于 2013-04-26T09:47:45.140 回答
25

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

/**
 * 
 * @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;
    }
}
于 2014-03-06T06:13:11.513 回答
13

使用很简单:

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

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

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String millisInString  = dateFormat.format(new Date());
于 2016-10-25T10:52:47.917 回答
8

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

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;
    }

}
于 2014-10-03T07:34:24.637 回答
8

您可以通过尝试以下代码在 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);
于 2018-11-27T07:33:53.730 回答
6

Kotlin 中的解决方案:

val nowInEpoch = Instant.now().epochSecond

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

于 2019-08-23T21:02:59.600 回答
5

这是最广为人知的方法的比较列表 在此处输入图像描述

于 2021-03-09T16:33:11.243 回答
4

java.time

我想贡献现代答案。

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

刚才运行时的输出:

1543320466

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

Instant我正在使用的类是 java.time 的一部分,它是现代 Java 日期和时间 API。它内置在新的 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子包中导入日期和时间类。

链接

于 2018-11-27T12:08:02.837 回答
0

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

Kotlin 版本

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

val deltaEpoch = oldEpoch - currentEpoch

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

于 2019-12-12T07:57:02.607 回答
0

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

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;
    }
于 2017-07-14T18:28:37.903 回答