如何将给定的字符串格式解析为 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”)?

Android - 如何正确地将字符串解析为浮点数(价格数字格式:整数、小数或两者兼有)

给定特定格式的日期,我如何确定以月为单位的年龄?

如何解析 DateTime 并将其转换为 RFC 822 日期时间格式?

将时间戳(字符串)转换为毫秒(长)