我正在尝试将字符串日期转换为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提前
答案 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)
方法根据具体模式格式化Date
,dd MMM yyyy
格式化方法,格式化方法会返回String
格式Date
实例。
注意:解析Date
不会格式化Date
对象的值。 SimpleDateFormat#parse
会将String
dd MMM yyyy
转换为Date
个实例,而SimpleDateFormat#format
将String
从Date
转换为dd MMM yyyy
格式。
SimpleDateFormat#setTimeZone
说,
此方法设置的TimeZone可能会因a而被覆盖 调用解析方法。
此外,在打印TimeZone
已经建议的Date
之前,您无法在使用TimeZone.setDefault(TimeZone.getTimeZone("IST"));
方法的Date
对象上设置user2004685
。
答案 1 :(得分:3)
您已经将TimeZone
转换为IST
,方法是在TimeZone
上设置SimpleDateFormat
属性,然后使用它解析输入字符串。
如果我正确理解您的问题,您希望控制台在IST
而非UTC
或GMT
中打印日期。为此,您只需执行以下操作即可将默认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 8及更高版本中。适用于Java 6和Java的后端端口7和Android。
这些新类对旧的日期时间类进行了浩大的改进。搜索Stack Overflow以获取更多讨论和示例。
对于没有时间的仅限日期的值,请使用LocalDate
类。
为人类语言指定One Shell以解释月份名称。如果省略,则隐式应用JVM的当前默认值Locale
。最好明确指定所需/期望的Locale。例如,Locale.US
或Locale.ENGLISH
或new 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));