如何转换util.date格式的字符串日期?

时间:2016-03-25 07:39:03

标签: java date

我正在尝试将字符串日期转换为util.Date格式,我尝试了以下方法

String startingDate="25 Mar 2016";
SimpleDateFormat sdf=new SimpleDateFormat("dd MMM yyyy");
sdf.setTimeZone(TimeZone.getTimeZone("IST"));
Date date=sdf.parse(startingDate);

我希望日期输出为" Fri Mar 25 00:00:00 IST 2016"但我正在" Thu Mar 24 18:30:00 UTC 2016"这是不正确的,因为我正在获得不同的TIMEZONE,我想要" IST"时区。请帮忙 ! Thanx提前

4 个答案:

答案 0 :(得分:3)

  

我希望日期输出为“2016年3月25日”..

默认情况下,当您打印Date实例toString时,将调用Date类的方法,它将以EEE MMM dd HH:mm:ss zzz yyyy格式打印日期数据,以便您获得Thu Mar 24 18:30:00 UTC 2016

目前,如果您Date中已有String,则无需格式化日期,只需使用String。您还可以使用SimpleDateFormat#format(String dateString)方法根据具体模式格式化Datedd MMM yyyy格式化方法,格式化方法会返回String格式Date实例。

注意:解析Date不会格式化Date对象的值。 SimpleDateFormat#parse会将String dd MMM yyyy转换为Date个实例,而SimpleDateFormat#formatStringDate转换为dd MMM yyyy格式。

SimpleDateFormat#setTimeZone说,

  

此方法设置的TimeZone可能会因a而被覆盖   调用解析方法。

此外,在打印TimeZone已经建议的Date之前,您无法在使用TimeZone.setDefault(TimeZone.getTimeZone("IST"));方法的Date对象上设置user2004685

答案 1 :(得分:3)

您已经将TimeZone转换为IST,方法是在TimeZone上设置SimpleDateFormat属性,然后使用它解析输入字符串。

如果我正确理解您的问题,您希望控制台在IST而非UTCGMT中打印日期。为此,您只需执行以下操作即可将默认TimeZone更改为IST

TimeZone.setDefault(TimeZone.getTimeZone("IST"));

以下是代码段:

public static void main (String[] args) throws Exception
{
    String startingDate = "25 Mar 2016";
    SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy");
    sdf.setTimeZone(TimeZone.getTimeZone("IST"));

    TimeZone.setDefault(TimeZone.getTimeZone("IST"));
    System.out.println(sdf.parse(startingDate));
}

输出:

Fri Mar 25 00:00:00 IST 2016

答案 2 :(得分:2)

问题和其他答案正在使用过时的类。

避免旧的日期时间类

旧的java.util.Date/.Calendar,SimpleDateFormat以及与最早版本的Java捆绑在一起的内容已被证明设计糟糕,令人困惑且麻烦。避免它们。

java.time

java.time框架内置于Java 8及更高版本中。适用于Java 6和Java的后端端口7和Android。

这些新类对旧的日期时间类进行了浩大的改进。搜索Stack Overflow以获取更多讨论和示例。

对于没有时间的仅限日期的值,请使用LocalDate类。

为人类语言指定One Shell以解释月份名称。如果省略,则隐式应用JVM的当前默认值Locale。最好明确指定所需/期望的Locale。例如,Locale.USLocale.ENGLISHnew Locale( "en" , "IN" ),适用于您的传入数据。

String input = "25 Mar 2016";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd MMM yyyy" );
formatter = formatter.withLocale( Locale.ENGLISH );  // Specify the language to interpret name-of-month.
LocalDate localDate = LocalDate.parse( input , formatter );

要获取当天第一时间的日期时间,请指定创建ZonedDateTime的时区。

ZoneId zoneId = ZoneId.of( "Asia/Kolkata" ); // Or "Europe/Paris", "America/Montreal", and such.
ZonedDateTime zdt = localDate.atStartOfDay( zoneId );

永远不要假设当天00:00:00.0开始。夏令时(DST)等异常表示该日可能在另一时间开始。让java.time通过调用atStartOfDay来处理这些详细信息。

答案 3 :(得分:0)

你可以在这里得到它:

String startingDate="25 Mar 2016";
DateFormat dateFormat = new SimpleDateFormat("dd MMM yyyy");
System.out.println("Date: " + dateFormat.parse(startingDate));