如何在java中获取给定的日期字符串格式(模式)?
我想获取给定日期字符串的格式。如何在java中获取给定的日期字符串格式(模式)?
例如:我有一个字符串,如2011-09-27T07:04:21.97-05:00
,此字符串的日期格式为yyyy-MM-dd'T'HH:mm:ss.SSS
。
在这里,我想找出此日期格式,当我经过串(2011-09-27T07:04:21.97-05:00
),其将返回格式(yyyy-MM-dd'T'HH:mm:ss.SSS
)的方法,那么以后我会根据我的要求(like yy-mm--dd or mm/dd/yyyy
)格式化我给出的日期字符串。
任何人都可以告诉我如何实现它?
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NewClass {
private static final String[] formats = {
"yyyy-MM-dd'T'HH:mm:ss'Z'", "yyyy-MM-dd'T'HH:mm:ssZ",
"yyyy-MM-dd'T'HH:mm:ss", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
"yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd HH:mm:ss",
"MM/dd/yyyy HH:mm:ss", "MM/dd/yyyy'T'HH:mm:ss.SSS'Z'",
"MM/dd/yyyy'T'HH:mm:ss.SSSZ", "MM/dd/yyyy'T'HH:mm:ss.SSS",
"MM/dd/yyyy'T'HH:mm:ssZ", "MM/dd/yyyy'T'HH:mm:ss",
"yyyy:MM:dd HH:mm:ss", "yyyyMMdd", };
/*
* @param args
*/
public static void main(String[] args) {
String yyyyMMdd = "20110917";
parse(yyyyMMdd);
}
public static void parse(String d) {
if (d != null) {
for (String parse : formats) {
SimpleDateFormat sdf = new SimpleDateFormat(parse);
try {
sdf.parse(d);
System.out.println("Printing the value of " + parse);
} catch (ParseException e) {
}
}
}
}
}
以上解决方案将会对日期进行解析,但不会给出日期格式。 SimpleDateFormat的toPattern和toLocalizedPattern会给出确切的格式。 –
如果有人正在使用此解决方案,只需在打印值后返回解析字符串 – Narasimha
您将需要使用inital日期字符串并将其转换为日期对象,并传递该转换后的日期对象并将其格式化为所需的字符串。
我想你应该尝试解析一些预定义模式的输入字符串。工作的那个是你需要的那个。请记住,有些模式非常棘手。
01.12.12是2012年12月1日在欧洲,但2012年1月12日在美国。它也可能是2001年12月12日。
你可以做这样的方式,我不知道好办法或没有,但尝试这个
首先创建的SimpleDateFormat对象
SimpleDateFormt sdf = new SimpleDateFormat("yyyy-MM-dd 'T' HH:mm:ss.SSS");
现在,当检查日期,如果这将在此解析格式然后更改按照您的格式
try{
Date date = sdf.parse(yourdate);
sdf.applyPattern("yy-mm--dd or mm/dd/yyyy");
String dateformat = sdf.format(date);
}catch(Exception ex) { // here forgot the exact exception class Parse exception was used
// do something here
}
更新的帖子:
Returning a date format from an unknown format of date string in java
如果我理解正确的话,要通过使用DateFormat.parse()
解析任意字符串(也就是你不知道格式的字符串)的日期?然后,你必须处理像如何处理01-02-03
(2003年1月2日?1 2003二月?等等)
你应该知道,至少东西关于预期的格式,像一个选择的几个预定义的格式问题,你输入。
HH:mm:ss.SSS => ([0-2]{1,}[0-9]{1,})(:)([0-5]{1,}[0-9]{1,})(:)([0-5]{1,}[0-9]{1,})(.)([0-9]{1,3})
yyyy-mm-dd => ([0-9]{4})(-)([0-1]{1,}[0-9]{1,})(-)([0-3]{1,}[0-9]{1,})
您的问题是什么? – cereallarceny
马杜的代码是可以锻炼的,但会出现一些性能问题,因为每一次的失败的情况下将引发异常。 我想我们需要找到reguler表达式解决方案来查找给定日期String的模式。
,你可以找到在以下链接
http://regexlib.com/DisplayPatterns.aspx?cattabindex=4&categoryId=5&AspxAutoDetectCookieSupport=1
@Tomasz Nurkiewicz所有最重要reg表达式中,以日期和时间格式,不,它不是。这是从一种格式到另一种格式的日期转换问题。 –
我不明白这个Java问题是如何重复(非常一般)的Javascript问题 –
哈哈..我浪费了我的时间滚动这个问题的JavaScript回答..没有使用...它不是重复的问题..请不要使用untag口信 –