如何将两种不同类型的字符串格式解析为日期?

发布于 2024-12-01 19:25:43 字数 1311 浏览 2 评论 0原文

这样的日期

我正在尝试格式化像2011 年 8 月和 2011 年 8 月 24 日

,我现在使用它来解析它们。

//set the pattern here to look like the pattern you are expecting in your 'Date' variable
                    SimpleDateFormat sdf = new SimpleDateFormat("MMMM dd,yyyy");

 //Get the release date
                     releaseDate = postIt.next().text();

                     Date realDate = null;
                    try {
                        realDate = sdf.parse(releaseDate);
                    } catch (ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } 

                     int i = 0;
                    String gameDate =  realDate.toString();

我在调试中收到以下错误。

08-26 22:02:44.571: WARN/System.err(29218): java.text.ParseException: Unparseable date: "August 2011" (at offset 11)
08-26 22:02:44.571: WARN/System.err(29218):     at java.text.DateFormat.parse(DateFormat.java:626)

我将如何使其能够读取两种格式?

编辑:

这就是它现在解析它的方式...

08-27 00:10:48.951: VERBOSE/Dates(30449): August 2011  

如果格式化 2011 年 8 月 他们

08-27 00:10:48.951: ERROR/FormattedDATE(30449): Mon Aug 01 00:00:00 EDT 2011

都解析到同一日期。

I am trying to format a date like these

august 2011, and august 24,2011

I am using this to parse them now..

//set the pattern here to look like the pattern you are expecting in your 'Date' variable
                    SimpleDateFormat sdf = new SimpleDateFormat("MMMM dd,yyyy");

 //Get the release date
                     releaseDate = postIt.next().text();

                     Date realDate = null;
                    try {
                        realDate = sdf.parse(releaseDate);
                    } catch (ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } 

                     int i = 0;
                    String gameDate =  realDate.toString();

i get the following error in my debug.

08-26 22:02:44.571: WARN/System.err(29218): java.text.ParseException: Unparseable date: "August 2011" (at offset 11)
08-26 22:02:44.571: WARN/System.err(29218):     at java.text.DateFormat.parse(DateFormat.java:626)

How would i go about making this to where it will read both formats?

EDIT:

This is how it parses it now...

08-27 00:10:48.951: VERBOSE/Dates(30449): August 2011  

If formated the August 2011
to

08-27 00:10:48.951: ERROR/FormattedDATE(30449): Mon Aug 01 00:00:00 EDT 2011

They all parse to this same date.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜唯美灬不弃 2024-12-08 19:25:43

我认为您需要每个格式字符串,例如

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFormatDriver {
    public static void main( String[] args ) throws Exception {

        SimpleDateFormat dayMonthYearFormatter = new SimpleDateFormat("MMMM dd,yyyy");
        SimpleDateFormat monthYearFormatter = new SimpleDateFormat("MMMM yyyy");                

        //String date1 = "August 11,2005";
        String date1 = "August 2005";
        Date realDate = null;

        try {
            realDate = dayMonthYearFormatter.parse(date1);
            System.out.println("parsed date -> " + realDate);
        } catch (ParseException e) {                    
            // fall back on other formatter
            try {               
                realDate = monthYearFormatter.parse(date1);
                System.out.println("parsed date -> " + realDate);
            } catch(ParseException e2) {
                System.err.println("could not parse" + date1);              
            }
        }                          
    }        
}

我建议您查看 http://joda-time.sourceforge .net

这只是一个想法,不确定我是否真的会使用它,但可以使用标记器来查看它是什么日期类型,2 个标记表示“2005 年 8 月 11 日”,1 个标记表示“8 月” 2005'。因此,如果令牌计数为 1,则使用一种格式化程序;如果令牌计数为 2,则使用其他格式化程序,例如

    int tokenCount = 0;
    StringTokenizer tokenizer = new StringTokenizer("August 11, 2005", ",");
    while(tokenizer.hasMoreTokens()) {
        tokenizer.nextToken();
        tokenCount++;
    }
    System.out.println("token count -> " + tokenCount);

I think you'll need a format string for each e.g.

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFormatDriver {
    public static void main( String[] args ) throws Exception {

        SimpleDateFormat dayMonthYearFormatter = new SimpleDateFormat("MMMM dd,yyyy");
        SimpleDateFormat monthYearFormatter = new SimpleDateFormat("MMMM yyyy");                

        //String date1 = "August 11,2005";
        String date1 = "August 2005";
        Date realDate = null;

        try {
            realDate = dayMonthYearFormatter.parse(date1);
            System.out.println("parsed date -> " + realDate);
        } catch (ParseException e) {                    
            // fall back on other formatter
            try {               
                realDate = monthYearFormatter.parse(date1);
                System.out.println("parsed date -> " + realDate);
            } catch(ParseException e2) {
                System.err.println("could not parse" + date1);              
            }
        }                          
    }        
}

I would recommend you check out http://joda-time.sourceforge.net

This is just an idea, not sure if I'd really use it but a tokenizer could be used to see what date type it is, 2 tokens for 'August 11, 2005', 1 for 'August 2005'. So use one formatter if token count is 1, other formatter if token count is 2 e.g.

    int tokenCount = 0;
    StringTokenizer tokenizer = new StringTokenizer("August 11, 2005", ",");
    while(tokenizer.hasMoreTokens()) {
        tokenizer.nextToken();
        tokenCount++;
    }
    System.out.println("token count -> " + tokenCount);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文