我想得到这样的当前时间戳:1320917972
int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts = tsTemp.toString();
java.util.Date
、java.util.Calendar
和 Timestamp
)现在已被 java.time 类取代。大部分 java.time 功能都向后移植到 Java 6 & ThreeTen-Backport 项目中的 Java 7。在 ThreeTenABP 项目中进一步适用于早期的 Android。见How to use ThreeTenABP…。
解决方案是:
Long tsLong = System.currentTimeMillis()/1000;
String ts = tsLong.toString();
来自开发者博客:
System.currentTimeMillis()
是标准的“挂钟”(时间和日期),表示自纪元以来的毫秒数。挂钟可由用户或电话网络设置(参见setCurrentTimeMillis(long)),因此时间可能会意外地向后或向前跳跃。仅当与现实世界的日期和时间的对应关系很重要时才应使用此时钟,例如在日历或闹钟应用程序中。间隔或经过时间测量应使用不同的时钟。如果您使用 System.currentTimeMillis()
,请考虑收听 ACTION_TIME_TICK
、ACTION_TIME_CHANGED
和 ACTION_TIMEZONE_CHANGED
Intent 广播以了解时间何时更改。
System.nanoTime()
是 System.currentTimeMillis()
的替代品,它没有不可预测的波动,并且专为测量持续时间差异而设计。
System.nanoTime()
不适合显示挂钟时间。为此,请改用 System.currentTimeMillis()
。
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());
您可以通过尝试以下代码在 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);
这是一个人类可读的时间戳,可以在文件名中使用,以防万一有人需要我需要的东西:
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;
}
}
Kotlin 中的解决方案:
val nowInEpoch = Instant.now().epochSecond
确保您的最低 SDK 版本为 26。
https://i.stack.imgur.com/XKY91.png
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,讲解很透彻。
这是另一个解决方案,这是在 kotlin 中:
val df: DateFormat = SimpleDateFormat("yyyy.MM.dd HH:mm:ss")
val timeStamp = df.format(Calendar.getInstance().time)
输出示例:
“2022.04.22 10:22:35”
我建议使用 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;
}
此代码是 Kotlin 版本。我还有另一个想法是在最后一位数字中添加一个随机洗牌整数,以提供方差纪元时间。
Kotlin 版本
val randomVariance = (0..100).shuffled().first()
val currentEpoch = (System.currentTimeMilis()/1000) + randomVariance
val deltaEpoch = oldEpoch - currentEpoch
我认为使用这个 kode 会更好,然后依赖于 android 版本 26 或更高版本
int
?