如何在java中解析以下日期格式Mon Nov 09 2015 00:00:00 GMT + 0530(印度标准时间)

时间:2015-11-09 07:55:48

标签: java date

我的格式为Mon Nov 09 2015 00:00:00 GMT+0530(印度标准时间)。我必须将其转换为格式为dd/MM/yyyy的sql日期。请帮忙。

我尝试了以下代码但没有帮助

Date date = new java.sql.Date(
(new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zz (zzzz)").parse("Mon Nov 09 2015 00:00:00 GMT+0530 (India Standard Time)"))
.getTime());

3 个答案:

答案 0 :(得分:4)

如下所示,此处也请参阅Java SimpleDateFormat

public static void main(String[] args) throws ParseException {
        String time = "Mon Nov 09 2015 00:00:00 GMT+0530 (India Standard Time)";
        DateFormat inputFormat = new SimpleDateFormat(
                "E MMM dd yyyy HH:mm:ss 'GMT'z", Locale.ENGLISH);
        Date date = inputFormat.parse(time);
        System.out.println(date);

        SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy", Locale.US);
        System.out.println(formatter.format(date));
    }

<强>输出

Mon Nov 09 00:00:00 IST 2015
09/11/2015

答案 1 :(得分:1)

java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到 modern date-time API*

由于您的日期时间字符串包含时区信息,请将其解析为 ZonedDateTime,您可以将其转换为其他 java.time 类型,并根据需要将其格式化为所需的格式。

演示:

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.format.TextStyle;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        String strDateTime = "Mon Nov 09 2015 00:00:00 GMT+0530 (India Standard Time)";
        
        DateTimeFormatter dtfInput = new DateTimeFormatterBuilder()
                                        .parseCaseInsensitive()
                                        .appendPattern("E MMM d uuuu H:m:s")
                                        .appendLiteral(" ")
                                        .appendZoneId()
                                        .appendPattern("X")
                                        .appendLiteral(" ")
                                        .appendLiteral("(")
                                        .appendGenericZoneText(TextStyle.FULL)
                                        .appendLiteral(')')
                                        .toFormatter(Locale.ENGLISH);
        
        ZonedDateTime zdt = ZonedDateTime.parse(strDateTime, dtfInput);
        OffsetDateTime odt = zdt.toOffsetDateTime();
        System.out.println(odt);
        
        // To LocalDate, LocalDateTime etc.
        LocalDate localDate = odt.toLocalDate();
        LocalDateTime localDateTime = odt.toLocalDateTime();
        System.out.println(localDate);
        System.out.println(localDateTime);
        
        // Get the formatted string
        DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("dd/MM/uuuu", Locale.ENGLISH);
        String formatted = dtfOutput.format(localDate);
        System.out.println(formatted);
        
        // In UTC
        odt = odt.withOffsetSameInstant(ZoneOffset.UTC);
        System.out.println(odt);
    }
}

输出:

2015-11-09T00:00+05:30
2015-11-09
2015-11-09T00:00
09/11/2015
2015-11-08T18:30Z

Trail: Date Time 了解有关现代日期时间 API 的更多信息。

在 JDBC 中支持 OffsetDateTime

从 JDBC 4.2 开始,您可以直接在代码中使用 OffsetDateTime,例如

PreparedStatement st = conn.prepareStatement("INSERT INTO mytable (columnfoo) VALUES (?)");
st.setObject(1, odt);
st.executeUpdate();
st.close();

JDBC Java SE 8 (JDBC 4.2) 中对 java.time API 的支持不需要任何公共 JDBC API 更改。 setObjectgetObject 方法根据以下映射支持 java.time 类型:

enter image description here

PostgreSQL™ 的注意事项: 不支持 ZonedDateTimeInstantOffsetTime / TIME WITH TIME ZONE。此外,OffsetDateTime 实例需要采用 UTC(偏移量为 0)。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

答案 2 :(得分:0)

我现在已经处理过这样的事情,这是我的解决方案:

 String dateString = new SimpleDateFormat("dd/MM/yyyy").format(timestamp.toDate()).toString();