是否可以检索给定语言环境的默认模式,而不会将返回的对象DateFormat.get*Instance()转换为SimpleDateFormat?
据我所知,在大多数情况下,一切都会好的,但有一个音符javadoc,在这里:"如果你想在格式或分析更精确的控制,(或者希望给用户更多的控制),可以尝试铸造DateFormat你从工厂的方法到a SimpleDateFormat.这对大多数国家都有用; 只要try你遇到一个不寻常的国家,就记得把它放在一个街区."
所以我想知道,如果我" 遇到一个不寻常的人 " ,我该怎么办?
代码示例:
/**
* Returns '\n'-separated string with available patterns.
* Optional adds appropriate language code to each pattern string.
*
* @param showLanguage Defines if language info is required.
* @return String with available patterns, optional (if showLanguage is set
* to "true") adds appropriate language code to each pattern.
*/
public String getPatternsForAvailableLocales(Boolean... …Run Code Online (Sandbox Code Playgroud) 我正在获取ParseException以下代码
String dateStr = "2011-12-22 10:56:24.389362";
String formatStr = "yyyy-MM-dd HH:mm:ss.SSSSSS";
Date testDate = null;
SimpleDateFormat sdf= new SimpleDateFormat(formatStr);
sdf.setLenient(false);
testDate = sdf.parse(dateStr);
System.out.println("CHECK DATE " + sdf.format(testDate));
Run Code Online (Sandbox Code Playgroud)
Exception in thread "main" java.text.ParseException: Unparseable date: "2011-12-22 10:56:24.389362"
at java.text.DateFormat.parse(DateFormat.java:337)
如果我注释掉该行sdf.setLenient(false),那么我会看到输出的时间差
CHECK DATE 2011-12-22 11:02:53.000362
我究竟做错了什么??
我正在读取包含日期的文本文件,我想在Java中将表示日期的字符串解析为Date对象.我注意到操作很慢.为什么?有没有办法加速呢?我的文件看起来像:
2012-05-02 12:08:06:950, secondColumn, thirdColumn
2012-05-02 12:08:07:530, secondColumn, thirdColumn
2012-05-02 12:08:08:610, secondColumn, thirdColumn
Run Code Online (Sandbox Code Playgroud)
我正在逐行读取文件,然后我String从每一行获取日期,然后我Date使用SimpleDateFormat如下方法将其解析为对象:
DataInputStream in = new DataInputStream(myFileInputStream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
while ((strLine = br.readLine()) != null)
{
....Do things....
Date myDateTime = (Date)formatter.parse(myDateString);
...Do things....
}
Run Code Online (Sandbox Code Playgroud) 在解析java中的大量日期时,我偶尔会遇到这个奇怪的错误:
java.lang.NumberFormatException: For input string: ".201144E4.201144E4"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1250)
at java.lang.Double.parseDouble(Double.java:540)
at java.text.DigitList.getDouble(DigitList.java:168)
at java.text.DecimalFormat.parse(DecimalFormat.java:1321)
at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1793)
at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1455)
at java.text.DateFormat.parse(DateFormat.java:355)
at gameloop.tf2tradebot.user.UserManager.getUser(UserManager.java:102)
at gameloop.tradebot2.bot.weaponbot1.Weaponbot1.onMessageReceived(Weaponbot1.java:269)
at gameloop.api.steam.chat.ChatEvent.run(ChatEvent.java:49)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)
我这个例子,日期是
2014-12-13 06:56:27
Run Code Online (Sandbox Code Playgroud)
日期格式是
private static final DateFormat STANDARD_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);
Run Code Online (Sandbox Code Playgroud)
我的代码:
Date firstSeenDate = null;
try
{
firstSeenDate = STANDARD_DATE_FORMAT.parse(firstSeen);
}
catch(Exception pe)
{
pe.printStackTrace();
logger.outputError(4001, "Error parsing first seen date. Shutting down...");
logger.outputError(4001, "First seen date : \'" + firstSeen + "\'");
CH405BotServer.shutdown(logger.getCallerName(), "an error in parsing …Run Code Online (Sandbox Code Playgroud) 使用jdk1.7.0_55,我将parseposition.errorIndex设为0,以防时区不是标准的.
但是使用jdk1.6.0_38我得到的parseposition.errorIndex为21,用于相同的错误时区格式
以下是样本:
String date = "13 Jan 2005 21:45:34 ABC";
String format = "dd MMM yyyy HH:mm:ss z";
ParsePosition pp = new ParsePosition(0);
pp.setIndex(0);
SimpleDateFormat sd = new SimpleDateFormat(format,Locale.ENGLISH);
Date d = sd.parse(date,pp);
System.out.println("Error Index "+pp.getErrorIndex());
Run Code Online (Sandbox Code Playgroud)
结果使用jdk 6:
错误索引21
结果使用jdk 7
错误索引0
为什么会有区别?
请帮忙
我有时间以下格式
2015-10-28T18:37:04.899 + 05:30
我必须以下面的格式创建插槽
上午11点至下午12点
2015年10月28日下午12点至下午1点
下午1点至2点28分
String timeValue = "2015-10-28T18:37:04.899+05:30";
StringTokenizer stringTokenizer = new StringTokenizer(timeValue,"T");
String dateValue = stringTokenizer.nextElement().toString();
String endDateValue = "2015-10-30";
String restString= stringTokenizer.nextElement().toString();
StringTokenizer secondTokeniser = new StringTokenizer(restString,":");
String hours = secondTokeniser.nextElement().toString();
String minutes = secondTokeniser.nextElement().toString();
hours = String.valueOf(Integer.parseInt(hours) + 2);
if (Integer.parseInt(minutes) > 30){
minutes = "00";
}else{
minutes = "30";
}
String amOrPm = null;
if(Integer.parseInt(hours) < 12){
amOrPm = "AM";
}else{
amOrPm = "PM";
hours = String.valueOf(getHoursValue(Integer.parseInt(hours)));
}
String time1 = hours …Run Code Online (Sandbox Code Playgroud) 我试图将a格式化Date为String使用SimpleDateFormat,而im使用的模式就是这个
"YYYY-MM-dd'T'HH:MM:ss.SSSxxx"
但到达这条线时
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSxxx");
Run Code Online (Sandbox Code Playgroud)
我得到以下异常:
java.lang.IllegalArgumentException:在java.text.SimpleDateFormat的java.text.SimpleDateFormat.validatePattern(SimpleDateFormat.java:312)的java.text.SimpleDateFormat.validatePatternCharacter(SimpleDateFormat.java:323)中的未知模式字符'x'. SimpleDateFormat.java:365)at java.text.SimpleDateFormat.(SimpleDateFormat.java:258)
我试图实现的格式是" 2017-06-16T12:19:59.001 + 02:00 "
根据文档这个模式应该工作什么错了?
编辑 为了澄清,我尝试了xxx和XXX
在XXX的情况下我得到java.lang.IllegalArgumentException:未知的模式字符'X'
我正在开发一个spring应用程序,在我的一个控制器中,我有以下行从字符串到日期进行解析,并将解析的日期格式化为所需的格式.但是我需要在没有使用任何SimpleDateFormat的情况下将格式化的字符串解析回日期,所以有可能这样做吗?
SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");
SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd");
Date pick=dateFormat.parse(request.getParameter("pickDate"));
String pick_date=dateFormat2.format(pick);
Run Code Online (Sandbox Code Playgroud) 我有一个字符串,可能包含以下任何格式的日期:
2001-01-05 (yyyy-mm-dd)
2001/01/05 (yyyy/mm/dd)
01/05/2001 (dd/mm/yyyy)
01-05-2001 (dd-mm-yyyy)
2001 january 5
2001 5 january
january 5 2001
5 january 2001
january 5
5 january
Run Code Online (Sandbox Code Playgroud)
我希望能够解析特定的字符串并从中提取Date对象.
我的方法如下:
String[] date_formats = {
"yyyy-MM-dd",
"yyyyy/MM/dd",
"dd/MM/yyyyy",
"dd-MM-yyyy",
"yyyy MMM dd",
"yyyy dd MMM",
"dd MMM yyyy",
"dd MMM",
"MMM dd",
"dd MMM yyyy"};
String output_date = null;
for (String formatString : date_formats)
{
try
{
Date mydate = new SimpleDateFormat(formatString).parse(token);
SimpleDateFormat outdate = new SimpleDateFormat("yyyyMMdd");
output_date = outdate.format(mydate);
break;
}
catch (ParseException …Run Code Online (Sandbox Code Playgroud) 有人可以解释为什么SimpleDateFormat在使用SimpleTimeZone设置时区时将我的解析日期减去1秒?
这是一个jdk bug吗?
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.SimpleTimeZone;
import java.util.TimeZone;
public class SimpleDateFormatTest {
public static void main(String[] args) throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
format.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(format.parse("2016-02-24T17:31:00Z"));
// prints Wed Feb 24 17:31:00 UTC 2016
format.setTimeZone(new SimpleTimeZone(SimpleTimeZone.UTC_TIME, "UTC"));
System.out.println(format.parse("2016-02-24T17:31:00Z"));
// Wed Feb 24 17:30:59 UTC 2016
}
}
Run Code Online (Sandbox Code Playgroud) simpledateformat ×10
java ×9
date ×4
datetime ×3
android ×2
date-parsing ×2
android-date ×1
java-7 ×1
jdk1.6 ×1
locale ×1
parsing ×1