使用Java GMT + 5:30获取时间戳

时间:2015-05-11 06:58:38

标签: java date datetime time timestamp

我想要给定日期的时间戳。 使用此代码

 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) 请帮帮我

3 个答案:

答案 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.time

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]