如何将给定的字符串格式解析为 dd-MMM-yyyy hh:mm:ss:aa?
Posted
技术标签:
【中文标题】如何将给定的字符串格式解析为 dd-MMM-yyyy hh:mm:ss:aa?【英文标题】:How to parse given string format to dd-MMM-yyyy hh:mm:ss:aa? 【发布时间】:2016-09-08 01:31:24 【问题描述】:我可以得到Wed May 11 15:36:08 IST 2016
的输出,但是如何将日期转换为所需格式的字符串?
要求格式为:12-05-2016 16:05:08 pm
我尝试的是,
public class Test
public static void main(String args[]) throws ParseException
String epoche="1462961108000";
Long initialLogTime = Long.valueOf(epoche);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(initialLogTime);
Calendar fromDateTime = calendar;
Calendar toDateTime = fromDateTime;
toDateTime.add(Calendar.MINUTE, 30);
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss:aa");
String datestring = String.valueOf(fromDateTime.getTime());
String datestring1 = String.valueOf(toDateTime.getTime());
System.out.println(datestring); //here output is Wed May 11 15:36:08 IST 2016
System.out.println(datestring1); // here output is Wed May 11 15:36:08 IST 2016
Date dates = dateFormat.parse(datestring);
Date date1s = dateFormat.parse(datestring1);
System.out.println(dates);
System.out.println(date1s);
我得到的错误是:
Exception in thread "main" java.text.ParseException: Unparseable date: "Wed May 11 16:05:08 IST 2016"
at java.text.DateFormat.parse(DateFormat.java:357)
at test.Test.main(Test.java:27)
【问题讨论】:
当您已经拥有该值时,为什么还要转换为字符串然后解析?目前还不清楚这里的最终目标是什么......(如果只是将值格式化为字符串,你根本不应该调用parse
。)
正如所指出的,SimpleDateFormat
应该使用Date
对象上的方法format()
调用,而不是String
对象上的parse()
,以获得所需的结果
如果您使用的是 SimpleDateFormat,请注意它是一个格式化程序。它可以解析和格式化。解析意味着您转换为类型实例,例如 Date。格式化意味着您实质上是将其转换为可读的形式,通常是字符串的形式。在您的情况下,您已经有一个日期,因此您不需要任何中间步骤,就像您尝试做的那样。
【参考方案1】:
您需要相应地格式化您的日期。这对你有帮助
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss:aa");
System.out.println(dateFormat.format(fromDateTime.getTime()));
System.out.println(dateFormat.format(toDateTime.getTime()));
【讨论】:
你的格式dd-MMM-yyyy HH:mm:ss:aa
给出输出 11-May-2016 15:35:08:PM
@ankur-singhal api 似乎没有提供小写的替代方案 [SimpleDateFormat]](docs.oracle.com/javase/7/docs/api/java/text/…),所以我建议将大写 PM/AM 替换为小写也许通过搜索和替换或拆分。
@JoaoEsperancinha 我实际上指向的是May
而不是05
@ankur-singhal 现在它会给05
.. 感谢您指出【参考方案2】:
如果你使用的是 java 8,你可以使用
LocalDate 日期 = LocalDate.now();
DateTimeFormatter 格式化程序 = DateTimeFormatter.ofPattern("dd-MMM-yyyy HH:mm:ss:aa");
System.out.println(date.format(formatter));
【讨论】:
【参考方案3】:请试试这个
public static void main(String[] args)
String epoche = "1462961108000";
Date date = new Date(Long.parseLong(epoche));
DateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss:aa");
String strDate = sdf.format(date);
System.out.println(strDate);
输出
11-05-2016 15:35:08:PM
【讨论】:
【参考方案4】:在 android 中,将 String Like 11/10/2017 11:16:46 传递给函数 ConvertDateTime
public String ConvertUpdate(String strDate)
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
try
Date d = simpleDateFormat.parse(strDate);
simpleDateFormat = new SimpleDateFormat("dd MMM yy hh:mm a");
return simpleDateFormat.format(d);
catch (ParseException e)
e.printStackTrace();
return null;
输出 2017 年 11 月 10 日上午 11:16
【讨论】:
以上是关于如何将给定的字符串格式解析为 dd-MMM-yyyy hh:mm:ss:aa?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 DateTime 转换为/从特定的字符串格式(两种方式,例如给定格式为“yyyyMMdd”)?
格式为“07-apr-2016”的 Java 日期字符串在转换为 sqldate 时会产生错误的结果