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

时间:2011-08-09 08:30:42

标签: android timestamp

我想转换我的日期(字符串格式),例如13-09-2011,进入时间戳。我使用下面的代码,但我得到了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);

5 个答案:

答案 0 :(得分:55)

如果您使用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这样的内容,这是很长的价值。

答案 1 :(得分:12)

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;

答案 2 :(得分:2)

这一行:

"Today is " +timeStampDate

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

你内部的TimeStamp拥有你想要的价值。如果你想得到它而不是使用: 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());

答案 3 :(得分:1)

tl; dr

使用现代的 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-Timemaintenance mode项目建议迁移到java.time类。

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

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

在哪里获取java.time类?

答案 4 :(得分:0)

它可以帮助你

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


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