将字符串转换为日期格式

时间:2013-12-31 09:02:50

标签: java android string date datetime

我正在尝试将字符串utc日期转换为Date。使用以下代码

这是我的UTC字符串日期 - 12/31/2013 8:40:00 AM

我想将此字符串转换为UTC日期。

static final String DATEFORMAT = "dd/MM/yyyy HH:mm:ss aa";

StringDateToDate("**12/31/2013 8:40:00 AM**");

 public static Date StringDateToDate(String StrDate)
    {
        Date dateToReturn = null;
        SimpleDateFormat dateFormat = new SimpleDateFormat(DATEFORMAT);
        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));

            try {
                dateToReturn = dateFormat.parse(StrDate);
            } catch (ParseException e) {

                e.printStackTrace();
            }


        return dateToReturn;

}

但我的错误日期错误( sun jul 12 19:40:00 CDT 2015 )。如何将此utc日期字符串转换为utc日期。我从XML格式的其他Web服务获取utcdatestring。

8 个答案:

答案 0 :(得分:2)

试试吧。可能是您的日期格式的顺序错误

String dtStart = "12/31/2013 8:40:00 AM";  
SimpleDateFormat  format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss aa");  

Date date = format.parse(dtStart);  
System.out.println(date);  

答案 1 :(得分:2)

首先你的日期格式应该是错误的:

static final String DATEFORMAT = "MM/dd/yyyy HH:mm:ss aa";

其次,你的输入必须没有像这样的星号(*):

Date a = StringDateToDate("12/31/2013 8:40:00 AM");
//yea I know I should be using Log but I'm testing on java
System.out.println(a.toString()); 

如果你真的想要asterixs,请执行以下操作:

String b = "**12/31/2013 8:40:00 AM**";
StringDateToDate(b.substring(2, b.length()-2));

答案 2 :(得分:2)

您的输入错误(没有31个月),将其更改为有效月份

StringDateToDate("12/01/2013 8:40:00 AM"); 

DateFormat

兼容

或更改 Dateformat 以适合您的输入值

static final String DATEFORMAT = "MM/dd/yyyy HH:mm:ss aa";

答案 3 :(得分:2)

像这样更改日期格式。

    String DATEFORMAT = "MM/dd/yyyy HH:mm:ss aa";

答案 4 :(得分:1)

G   Era designator       Text               AD
y   Year                 Year               1996; 96
M   Month in year        Month              July; Jul; 07
w   Week in year         Number             27
W   Week in month        Number             2
D   Day in year          Number             189
d   Day in month         Number             10
F   Day of week in month Number             2
E   Day in week          Text               Tuesday; Tue
u   Day number of week   Number             1
a   Am/pm marker         Text               PM
H   Hour in day (0-23)   Number             0
k   Hour in day (1-24)   Number             24
K   Hour in am/pm (0-11) Number             0
h   Hour in am/pm (1-12) Number             12
m   Minute in hour       Number             30
s   Second in minute     Number             55
S   Millisecond          Number             978
z   Time zone            General time zone  Pacific Standard Time; PST; GMT-08:00
Z   Time zone            RFC 822 time zone  -0800
X   Time zone            ISO 8601 time zone -08; -0800; -08:00

这是Date and Time Patterns

String string = "January 2, 2010";
Date date = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(string);
System.out.println(date);

答案 5 :(得分:1)

您的日期格式应为此格式,以便解析您在此处提供的字符串。

static final String DATEFORMAT = "MM/dd/yyyy HH:mm:ss aa";

答案 6 :(得分:1)

还要注意HH。 HH是一天中的小时(0-23)。如果您的输入日期时间是0-11(可能是这样的,因为AM \ PM已经给出,而且模式最后有一个aa),那么必须使用KK而不是HH。

答案 7 :(得分:0)

获得的结果并没有错,但这是预期的结果。

默认情况下,解析是宽松的。通过宽松的解析,解析器可以使用启发式方法来解释与该对象的格式不完全匹配的输入。

启发式使用指定月份的数字而不是指定年份的月份,但是自指定年份起的月份,31个月为2年7个月,因此:2013年1月+ 2年+ 7个月= 07/2015。 / p>

这可能会造成混淆,因此建议在解析之前将宽松解析设置为false,但是当pattern与字符串中的某些内容不匹配时,会抛出解析异常。

public static Date StringDateToDate(String StrDate) {
    Date dateToReturn = null;
    SimpleDateFormat dateFormat = new SimpleDateFormat(DATEFORMAT);
    dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));

    dateFormat.setLenient(false);

    try {
        dateToReturn = dateFormat.parse(StrDate);
    } catch (ParseException e) {
        e.printStackTrace();
    }

    return dateToReturn;
}