我想得到这样的当前时间戳:1320917972
int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts = tsTemp.toString();
解决方案是:
Long tsLong = System.currentTimeMillis()/1000;
String ts = tsLong.toString();
来自开发者博客:
System.currentTimeMillis()
是标准的“挂钟”(时间和日期),表示自纪元以来的毫秒数。挂钟可以由用户或电话网络设置(参见setCurrentTimeMillis(long)),因此时间可能会意外地向后或向前跳跃。仅当与现实世界的日期和时间的对应关系很重要时才应使用此时钟,例如在日历或闹钟应用程序中。间隔或经过时间测量应使用不同的时钟。如果您正在使用,请System.currentTimeMillis()
考虑收听ACTION_TIME_TICK
和Intent 广播以了解时间何时更改。ACTION_TIME_CHANGED
ACTION_TIMEZONE_CHANGED
1320917972是 Unix 时间戳,使用自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数。您可以使用TimeUnit
类进行单位转换 - 从System.currentTimeMillis()
秒到秒。
String timeStamp = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
您可以使用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 millis = new Date().getTime();
如果你想要它的特定格式,那么你需要像下面这样的 Formatter
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String millisInString = dateFormat.format(new Date());
这是一个人类可读的时间戳,可以在文件名中使用,以防万一有人需要我需要的东西:
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 中获取当前时间戳
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);
Kotlin 中的解决方案:
val nowInEpoch = Instant.now().epochSecond
确保您的最低 SDK 版本为 26。
我想贡献现代答案。
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 的回答相同。输出和以前一样。
是的,java.time 在较旧和较新的 Android 设备上运行良好。它只需要至少Java 6。
org.threeten.bp
子包中导入日期和时间类。java.time
.java.time
第一次描述的地方。java.time
Java 6 和 7 的反向移植(ThreeTen for JSR-310)。此代码是 Kotlin 版本。我还有另一个想法是在最后一位数字中添加一个随机洗牌整数,以提供方差纪元时间。
Kotlin 版本
val randomVariance = (0..100).shuffled().first()
val currentEpoch = (System.currentTimeMilis()/1000) + randomVariance
val deltaEpoch = oldEpoch - currentEpoch
我认为使用这个 kode 会更好,然后依赖于 android 版本 26 或更高版本
我建议使用 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;
}