我有一种日期和时间格式,如下所示:
Tue Apr 23 16:08:28 GMT+05:30 2013
我想转换成毫秒,但我实际上不知道它是哪种格式。任何人都可以帮助我。
API 26 中引入的DateTimeFormatter更新。
对于 API 26 及更高版本,代码可以编写如下
// Below Imports are required for this code snippet
// import java.util.Locale;
// import java.time.LocalDateTime;
// import java.time.ZoneOffset;
// import java.time.format.DateTimeFormatter;
String date = "Tue Apr 23 16:08:28 GMT+05:30 2013";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
LocalDateTime localDate = LocalDateTime.parse(date, formatter);
long timeInMilliseconds = localDate.atOffset(ZoneOffset.UTC).toInstant().toEpochMilli();
Log.d(TAG, "Date in milli :: FOR API >= 26 >>> " + timeInMilliseconds);
// Output is -> Date in milli :: FOR API >= 26 >>> 1366733308000
但截至目前,只有 6% 的设备运行在 26 或更高版本上。因此,您将需要上述类的向后兼容性。JakeWharton编写了基于ThreeTenBP的ThreeTenABP,但专门开发用于 Android。阅读更多关于如何以及为什么应该使用 ThreeTenABP 而不是 java.time、ThreeTen-Backport 甚至 Joda-Time
所以使用 ThreeTenABP,上面的代码可以写成(并在 API 16 到 API 29 上验证)
// Below Imports are required for this code snippet
// import java.util.Locale;
// import org.threeten.bp.OffsetDateTime;
// import org.threeten.bp.format.DateTimeFormatter;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
"EEE MMM dd HH:mm:ss OOOO yyyy", Locale.ROOT);
String givenDateString = "Tue Apr 23 16:08:28 GMT+05:30 2013";
long timeInMilliseconds = OffsetDateTime.parse(givenDateString, formatter)
.toInstant()
.toEpochMilli();
System.out.println("Date in milli :: USING ThreeTenABP >>> " + timeInMilliseconds);
// Output is -> Date in milli :: USING ThreeTenABP >>> 1366713508000
Ole 在他的回答中涵盖了总结信息(也适用于 Java),您应该研究一下。
以下是现在不应使用的旧方法(以及此答案的先前版本)
使用下面的方法
String givenDateString = "Tue Apr 23 16:08:28 GMT+05:30 2013";
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
try {
Date mDate = sdf.parse(givenDateString);
long timeInMilliseconds = mDate.getTime();
System.out.println("Date in milli :: " + timeInMilliseconds);
} catch (ParseException e) {
e.printStackTrace();
}
阅读有关日期和时间模式字符串的更多信息。
尝试这个...
Calendar calendar = Calendar.getInstance();
calendar.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(),
timePicker.getCurrentHour(), timePicker.getCurrentMinute(), 0);
long startTime = calendar.getTimeInMillis();
您可以使用此代码
long miliSecsDate = milliseconds ("2015-06-04");
Log.d("miliSecsDate", " = "+miliSecsDate);
public long milliseconds(String date)
{
//String date_ = date;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try
{
Date mDate = sdf.parse(date);
long timeInMilliseconds = mDate.getTime();
System.out.println("Date in milli :: " + timeInMilliseconds);
return timeInMilliseconds;
}
catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}
Date beginupd = new Date(cursor1.getLong(1));
此变量 beginupd 包含格式
Wed Oct 12 11:55:03 GMT+05:30 2011
long millisecond = beginupd.getTime();
Date.getTime() JavaDoc states:
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
在 Kotlin 中试试这个,
val calendar = Calendar.getInstance()
val UniqueID = calendar.timeInMillis
Java中的相同代码,
Calendar calendar = Calendar.getInstance(); long time = calendar.getTimeInMillis();
我提供的是现代答案——尽管它并不比它在你的 Android API 级别上的工作更现代。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
"EEE MMM dd HH:mm:ss OOOO yyyy", Locale.ROOT);
String givenDateString = "Tue Apr 23 16:08:28 GMT+05:30 2013";
long timeInMilliseconds = OffsetDateTime.parse(givenDateString, formatter)
.toInstant()
.toEpochMilli();
System.out.println(timeInMilliseconds);
此片段的输出是:
1366713508000
大多数其他答案中使用的SimpleDateFormat
,Date
和Calendar
类设计不佳,现在早已过时。我建议您改用 java.time,这是现代 Java 日期和时间 API。编辑:2013 年提出问题时,其他答案都是很好的答案。只有时间在流逝,我们不应该再使用SimpleDateFormat
,Date
等等Calendar
。
java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少Java 6。
org.threeten.bp
子包中导入日期和时间类。java.time
第一次描述的地方。java.time
Java 6 和 7 的反向移植(ThreeTen for JSR-310)。将日期和时间字符串隐藏到毫秒:
public static final String DATE_TIME_FORMAT = "MM/dd/yyyy HH:mm:ss a";
或者
public static final String DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";
或者
public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZZZZZ";
//TimeZone.getAvailableIds() to list all timezone ids
String timeZone = "EST5EDT";//it can be anything timezone like IST, GMT.
String time = "2/21/2018 7:41:00 AM";
public static long[] convertTimeInMillis(String dateTimeFormat, String timeZone, String... times) throws ParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat(dateTimeFormat, Locale.getDefault());
dateFormat.setTimeZone(TimeZone.getTimeZone(timeZone));
long[] ret = new long[times.length];
for (int i = 0; i < times.length; i++) {
String timeWithTZ = times[i] + " "+timeZone;
Date d = dateFormat.parse(timeWithTZ);
ret[i] = d.getTime();
}
return ret;
}
//毫秒到日期字符串
public static String convertTimeInMillisToDateString(long timeInMillis, String DATE_TIME_FORMAT) {
Date d = new Date(timeInMillis);
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
return sdf.format(d);
}
Android 26 及更高版本
Conversation from epoch to UTC date time and Device date time
public class TimeConversionUtil {
public static long getCurrentEpochUTC() {
return Instant.now(Clock.systemUTC()).toEpochMilli();
}
public static String deviceDateTimeString(long epochMilliUtc) {
Instant instant = Instant.ofEpochMilli(epochMilliUtc);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd, yyyy, hh:mm:ss a", Locale.US).withZone(ZoneId.systemDefault());
return formatter.format(instant);
}
public static String uTCDateTimeString(long epochMilliUtc) {
Instant instant = Instant.ofEpochMilli(epochMilliUtc);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd, yyyy, hh:mm:ss a", Locale.US).withZone(ZoneId.of("UTC"));
return formatter.format(instant);
}
public static long convertDateStringToLongUTC(String stringUTCDate) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd, yyyy, hh:mm:ss a", Locale.ENGLISH);
LocalDateTime localDate = LocalDateTime.parse(stringUTCDate, formatter);
long timeInMilliseconds = localDate.atOffset(ZoneOffset.UTC).toInstant().toEpochMilli();
return timeInMilliseconds;
}
}
@Test
public void timeConversionTest() {
long currentTimeUtc = Instant.now(Clock.systemUTC()).toEpochMilli();
String utc = TimeConversionUtil.uTCDateTimeString(currentTimeUtc);
Long utcLongTime = TimeConversionUtil.convertDateStringToLongUTC(utc);
String utc1 = TimeConversionUtil.uTCDateTimeString(utcLongTime);
assertTrue(utc.equalsIgnoreCase(utc1));
}