Android获取当前时间戳?

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

int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts =  tsTemp.toString();
370029 次浏览

来自开发者博客:

System.currentTimeMillis()是标准的“墙壁”时钟(时间和日期),表示自epoch以来的毫秒数。挂钟可以由用户或电话网络设置(参见setCurrentTimeMillis(长)),所以时间可能会不可预测地向后或向前跳。这个时钟只应该在与现实世界的日期和时间相对应的情况下使用,例如在日历或闹钟应用程序中。间隔或流逝时间测量应该使用不同的时钟。如果你正在使用System.currentTimeMillis(),可以考虑收听ACTION_TIME_TICKACTION_TIME_CHANGEDACTION_TIMEZONE_CHANGED Intent广播来找出时间变化的时间。

你可以使用SimpleDateFormat类:

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

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

/**
*
* @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;
}
}

解决方案是:

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

这是一个人类可读的时间戳,可以用于文件名, 以防有人需要和我一样的东西:

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


}

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

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

它的用法很简单:

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

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

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

我建议使用Hits的答案,但添加一个Locale格式,这是如何Android 开发人员建议: < / p >

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

你可以通过尝试下面的代码在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);

java.time

我愿意给出现代的答案。

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

刚才运行时输出:

1543320466

虽然除以1000对许多人来说并不奇怪,但自己做时间转换可能很难快速读取,所以当你可以避免它时,这是一个坏习惯。

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

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

这与sealskej的答案相同。输出与之前相同。

问:我可以使用java吗?Android的时间?

是的,java。time在新旧安卓设备上都能很好地运行。它只需要至少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导入日期和时间类和子包。

链接

Kotlin解决方案:

val nowInEpoch = Instant.now().epochSecond

确保你的最低SDK版本是26。

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

芬兰湾的科特林版本

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


val deltaEpoch = oldEpoch - currentEpoch

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

这里是最广为人知的方法的比较列表 enter image description here < / p >

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

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

输出的例子:

“2022.04.22 10:22:35"