我想转换我的日期(字符串格式),例如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);
答案 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)
使用现代的 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 类,取代了麻烦的旧类,例如Date
,Calendar
和SimpleDateFormat
。
首先将您的输入字符串解析为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/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用2-4个字母的缩写,例如EST
或IST
,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
目前位于Joda-Time的maintenance 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