我想要给定日期的时间戳。 使用此代码
public static String getTimestamp(String time)
{
DateFormat dfm = new SimpleDateFormat("dd-mm-yy hh:mm:ss");
long unixtime = 0;
dfm.setTimeZone(TimeZone.getTimeZone("GMT+5:30"));
try
{
unixtime = dfm.parse(time).getTime();
unixtime=unixtime/1000;
}
catch (ParseException e)
{
e.printStackTrace();
}
return ""+unixtime;
}
public static void main(String[] args)
{
System.out.println(getTimestamp("11-05-15 11:54:55"));
}
但是当我输入这个日期11-05-15 11:54:55
然后程序返回1420957495这个时间戳是Jan(01)的时间戳,但我想要May(06)
请帮帮我
答案 0 :(得分:2)
使用它 DateFormat dfm = new SimpleDateFormat(“dd-MM-yy hh:mm:ss”);
大写MM表示月份,小写表示分钟
答案 1 :(得分:1)
你应该改变你的模式。到目前为止,接受的答案是正确的月份。仍然缺少的是一天中一小时的模式符号。它应该是H而不是h。或者如果你更喜欢英语小时表示法,你可以使用另一个字母" a"表示上午/下午。所以最终的解决方案是:
DateFormat dfm = new SimpleDateFormat("dd-MM-yy HH:mm:ss");
或
DateFormat dfm = new SimpleDateFormat("dd-MM-yy hh:mm:ss a", Locale.ENGLISH);
顺便说一句,我建议使用4位数年来排除任何使用yyyy的矛盾心理。
答案 2 :(得分:1)
有效偏移量必须包括填充零。您的偏移字符串GMT+5:30
应为GMT+05:30
0
之前5
。
除此之外,the Answer Meno Hochschild是正确且明智的。
java.util.Date / .Calendar和SimpleDateFormat类出了名的麻烦,令人困惑和有缺陷。 避免使用它们。
而是使用Java 8及更高版本中的java.time包。如果缺少,请使用Joda-Time库。
这是一些java.time代码(Java 8)。
首先,将您的输入解析为“本地”日期时间值,这意味着没有附加任何时区。由于输入中不包含偏移或时区,因此该值可适用于任何特定位置。
String input = "11-05-15 11:54:55"; // Strongly recommend using 4-digit year whenever possible, as suggested in Meno Hochschild’s Answer.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd-MM-yy HH:mm:ss" ); // No need for Locale in this case, but always consider it.
LocalDateTime localDateTime = LocalDateTime.parse( input , formatter );
接下来,我们假设这个值意味着代表印度的一个时刻。我们分配一个时区。我们只能指定一个偏移量。但通常我们应该使用时区。时区是偏移量加上过去,现在和将来的一组调整和异常情况,例如夏令时。
首先,我们为印度实例化一个时区。然后,我们会根据ZonedDateTime
生成LocalDateTime
,同时添加时区。
// Assign a time zone.
//ZoneId zoneId_plus_5_30 = ZoneId.of( "GMT+05:30" ); // You can use an offset, but know that a time zone is *more* than an offset.
ZoneId zoneIdKolkata = ZoneId.of( "Asia/Kolkata" ); // Better to use a time zone name if one is applicable. Ex: "Asia/Kolkata".
ZonedDateTime zonedDateTimeKolkata = ZonedDateTime.of( localDateTime , zoneIdKolkata );
为了好玩,让我们将同一时刻调整为UTC和蒙特利尔。
ZonedDateTime zonedDateTimeUtc = zonedDateTimeKolkata.withZoneSameInstant( ZoneOffset.UTC );
ZonedDateTime zonedDateTimeMontréal = zonedDateTimeKolkata.withZoneSameInstant( ZoneId.of( "America/Montreal" ) );
转储到控制台。
System.out.println( "Input: " + input );
System.out.println( "localDateTime: " + localDateTime );
System.out.println( "zonedDateTimeKolkata: " + zonedDateTimeKolkata );
System.out.println( "zonedDateTimeUtc: " + zonedDateTimeUtc );
System.out.println( "zonedDateTimeMontréal: " + zonedDateTimeMontréal );
跑步时。
Input: 11-05-15 11:54:55
localDateTime: 2015-05-11T11:54:55
zonedDateTimeKolkata: 2015-05-11T11:54:55+05:30[Asia/Kolkata]
zonedDateTimeUtc: 2015-05-11T06:24:55Z
zonedDateTimeMontréal: 2015-05-11T02:24:55-04:00[America/Montreal]