如何解析给定的字符串格式为dd-MMM-yyyy hh:mm:ss:aa?

5
我可以得到输出为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)

2
为什么要将其转换为字符串再解析,当你已经有了这个值?不清楚最终目的是什么...(如果只是将该值格式化为字符串,则根本不应该调用“parse”)。 - Jon Skeet
正如所指出的那样,应该在Date对象上使用format()方法调用SimpleDateFormat,而不是在String对象上使用parse()方法,以获得您需要的结果。 - Draken
如果您使用SimpleDateFormat,请考虑它是一个格式化器。它可以解析和格式化。解析意味着您将其转换为类型实例,比如一个日期。格式化意味着您基本上将其转换为可读形式,通常是一个字符串的形式。在您的情况下,您已经有一个日期,所以不需要像您之前试图做的那样进行任何中间步骤。 - Joao Esperancinha
4个回答

9

您需要相应地格式化日期。这将有助于您。

    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
@ankur-singhal 这个API似乎没有提供替代大写字母的方法 [SimpleDateFormat]](https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html),所以我建议只需通过搜索和替换或拆分来将大写PM/AM替换为小写。 - Joao Esperancinha
1
@JoaoEsperancinha,我实际上是在指 May 而不是 05 - Ankur Singhal
@ankur-singhal 现在它将会给出 05.. 感谢指出。 - Sanjeev

0
如果您正在使用Java 8,您可以使用以下代码:
LocalDate date = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy HH:mm:ss:aa");

System.out.println(date.format(formatter));


0
在Android中,将字符串“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;
}

输出: 11月10日上午11:16

0
请尝试这个。
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接