我正在尝试将字符串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。
答案 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
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;
}