在Android中将字符串日期转换为时间戳?

Posted

技术标签:

【中文标题】在Android中将字符串日期转换为时间戳?【英文标题】:Convert string Date into timestamp in Android? 【发布时间】:2011-10-23 00:42:49 【问题描述】:

我想转换我的日期(字符串格式),例如2011 年 9 月 13 日,进入时间戳。我使用了下面的代码,但我得到了 2011-09-13 00:00:00.0 因此。但我想要像 1312828200000 格式的时间戳。

我不明白如何转换它。

我的代码:

String str_date="13-09-2011";
DateFormat formatter ; 
Date date ; 
formatter = new SimpleDateFormat("dd-MM-yyyy");
date = (Date)formatter.parse(str_date); 
java.sql.Timestamp timeStampDate = new Timestamp(date.getTime());
System.out.println("Today is " +timeStampDate);

【问题讨论】:

仅供参考,java.util.Datejava.util.Calendarjava.text.SimpleDateFormat 等麻烦的旧日期时间类现在已被 java.time 类所取代。大多数 java.time 功能在 ThreeTen-Backport 项目中被反向移植到 Java 6 和 Java 7。在ThreeTenABP 项目中进一步适用于早期的android。见How to use ThreeTenABP… 【参考方案1】:

这一行:

"Today is " +timeStampDate

调用TimeStamp.toString()方法“以JDBC时间戳转义格式格式化时间戳。yyyy-mm-dd hh:mm:ss.fffffffff,其中ffffffffff表示纳秒。”

您在内部获得的时间戳具有您想要的值。如果你想得到它而不是使用: System.out.println("Today is " + timeStampDate.getTime());

    String str_date="13-09-2011";
    DateFormat formatter ; 
    Date date ; 
    formatter = new SimpleDateFormat("dd-MM-yyyy");
    date = (Date)formatter.parse(str_date);
    java.sql.Timestamp timeStampDate = new Timestamp(date.getTime());
    System.out.println("Today is " + timeStampDate.getTime());

或者如果你不需要Timestamp,你可以直接使用date.getTime()。它"Returns the Date as a millisecond value.":

    String str_date="13-09-2011";
    DateFormat formatter ; 
    Date date ; 
    formatter = new SimpleDateFormat("dd-MM-yyyy");
    date = (Date)formatter.parse(str_date);
    System.out.println("Today is " + date.getTime());

【讨论】:

【参考方案2】:

如果您使用 getTime()Date 对象,您将以毫秒为单位获得时间。 无需使用Timestamp 即可获得结果。

String str_date="13-09-2011";
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
Date date = (Date)formatter.parse(str_date); 
System.out.println("Today is " +date.getTime());

上面的代码会打印出你需要的1312828200000,这是一个长值。

【讨论】:

嗨,我如何将日期和时间转换为长 "12-09-2011"+"12:30" 嗨。我有一个输入为String dateStr = "26-04-2016 19:45"; DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy kk:mm");,我尝试了你给出的解决方案,但它给出了错误的结果。 仅供参考,java.util.Datejava.util.Calendarjava.text.SimpleDateFormat 等麻烦的旧日期时间类现在已被 java.time 类所取代。大多数 java.time 功能在 ThreeTen-Backport 项目中被反向移植到 Java 6 和 Java 7。在ThreeTenABP 项目中进一步适用于早期的Android。见How to use ThreeTenABP… getTime() 获取的时间不是毫秒!使用 getTimeInMillis() 以字符串形式获取时间戳【参考方案3】:
String str_date=month+"-"+day+"-"+yr;
DateFormat formatter = new SimpleDateFormat("MM-dd-yyyy");
Date date = (Date)formatter.parse(str_date); 
long output=date.getTime()/1000L;
String str=Long.toString(output);
long timestamp = Long.parseLong(str) * 1000;

【讨论】:

只有这个是正确答案所有其他答案给出不正确的结果【参考方案4】:

或许能帮到你

    long time= System.currentTimeMillis();//timestamp in milliseconds of current time


    String tp = Long.toString(time);//use timestamp as a string

【讨论】:

【参考方案5】:

tl;博士

使用现代 java.time 类。

LocalDate.parse( 
    "13-09-2011" , 
    DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) 
)
.atStartOfDay(
    ZoneId.of( "Africa/Casablanca" )  // Or use `ZoneOffset.UTC` instead of a zone.
)
.toInstant()
.toEpochMilli()

看到这个code run live at IdeOne.com。

1315872000000

详情

显然,您希望将特定日期的第一时刻表示为自 UTC 中 1970 年第一时刻的纪元参考以来的毫秒数。

java.time

现代方法使用 java.time 类,该类在几年前取代了麻烦的遗留类,例如 DateCalendarSimpleDateFormat

首先将您的输入字符串解析为LocalDate,以获得没有时间和时区的仅日期值。

提示:在将日期时间值作为文本交换时,不要使用此类自定义格式,而是使用标准的ISO 8601 格式。 java.time 类在解析/生成字符串时默认使用它们。

String input = "13-09-2011" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) ;
LocalDate ld = LocalDate.parse( input , f ) ;

确定该日期当天的第一个时刻。这样做需要一个时区。对于任何给定的时刻,日期在全球范围内因区域而异。例如,Paris France 中午夜后几分钟是新的一天,而 Montréal Québec 中仍然是“昨天”。

如果没有指定时区,JVM 会隐式应用其当前的默认时区。该默认值可能在运行时(!)期间change at any moment,因此您的结果可能会有所不同。最好将 desired/expected time zone 明确指定为参数。

continent/region 的格式指定proper time zone name,例如America/MontrealAfrica/CasablancaPacific/Auckland。切勿使用 2-4 个字母的缩写,例如 ESTIST,因为它们不是真正的时区,没有标准化,甚至不是唯一的 (!)。

ZoneId z = ZoneId.of( "America/Montreal" ) ;

永远不要假设一天从 00:00 开始。在某些日期的某些区域中,一天可能从另一个时间开始,例如 01:00。让 java.time 确定第一时刻。

ZonedDateTime zdt = ld.startOfDay( z ) ;  // Determine first moment of the day on this date in this zone. May not be 00:00.

通过提取Instant,从该区域调整为UTC。

Instant instant = zdt.toInstant() ;

获取自 1970-01-01T00:00Z 以来的毫秒数。请注意可能的数据丢失,因为Instant 具有更精细的纳秒分辨率。任何微秒或纳秒都将被忽略。

long millisecondsSinceEpoch = instant.toEpochMilli() ;

您可以返回另一个方向,从一个从纪元计数到 Instant

Instant instant = Instant.ofEpochMilli( millisecondsSinceEpoch) ;

关于java.time

java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。

您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。

从哪里获得 java.time 类?

Java SE 8Java SE 9Java SE 10Java SE 11 和更高版本 - 具有捆绑实现的标准 Java API 的一部分。 Java 9 添加了一些小功能和修复。 Java SE 6Java SE 7 大部分 java.time 功能在ThreeTen-Backport 中向后移植到 Java 6 和 7。 Android java.time 类的 Android 捆绑包实现的更高版本。 对于早期的 Android (ThreeTenABP 项目适应 ThreeTen-Backport(如上所述)。见How to use ThreeTenABP…

【讨论】:

【参考方案6】:

科特林

val dateString = "17-09-2021"
val formatter = SimpleDateFormat("dd-MM-yyyy", Locale.ENGLISH)
val date = formatter.parse(dateString) as Date
Log.i("i","Today is " + date.time)

你会得到类似于 1616668471659 的东西

【讨论】:

以上是关于在Android中将字符串日期转换为时间戳?的主要内容,如果未能解决你的问题,请参考以下文章

在scala中将时间字符串转换为时间戳/日期时间

Scala - 如何在 Spark SQL 查询中将日期字符串转换为时间戳?

在 PostgreSQL 中将 Julian 日期转换为时间戳

php怎么将指定日期转换为时间戳?

js 中日期 转换成时间戳 例如2013-08-30 转换为时间戳

php 怎么将指定日期转换为时间戳