我有一个日期和时间格式,如下所示:
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
以下是旧的方法(和此答案的先前版本),现在不应该使用
使用以下方法
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;
}
在 Kotlin 中,
只需要使用:
timeInMilSeconds = date.time
其中timeInMilSeconds
表示毫秒数(var timeInMilSeconds: Long
),而date
是Date类型。
将日期和时间字符串转换为毫秒:
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);
}
Date beginupd = new Date(cursor1.getLong(1));
Wed Oct 12 11:55:03 GMT+05:30 2011
long millisecond = beginupd.getTime();
Date.getTime() JavaDoc states:
我提供的是现代答案,但它并不比适用于您的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)。在 Kotlin 中尝试一下这个:
val calendar = Calendar.getInstance()
val UniqueID = calendar.timeInMillis
在Java中相同的代码,
Calendar calendar = Calendar.getInstance(); long time = calendar.getTimeInMillis();
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));
}
coreLibraryDesugaringEnabled
,它提供了向后兼容性,无需第三方库。 - Bitwise DEVS