我正在使用SimpleDateFormat带有Date对象的对象,如下所示.问题在于Date对象显示错误的日期,这与原始字符串相距几分钟.该Date对象似乎以调试器中的总毫秒数存储时间.
关于这个问题的任何想法?
import java.text.SimpleDateFormat;
import java.util.Date;
Date played_at_local;
dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSSSSZ");
played_at_local = dateFormat.parse("2011-04-11T22:27:18.491726-05:00");
//played_at_local shows "Mon Apr 11 22:35:29 America/Chicago 2011" in debugger
Run Code Online (Sandbox Code Playgroud) DateFormat sdf = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy");
sdf.parse("Sun Dec 13 10:00:00 UTC 2009")
Run Code Online (Sandbox Code Playgroud)
结果
java.text.ParseException:Unparseable date:Sun Dec 13 10:00:00 UTC 2009
注意:此代码似乎适用于普通的Java应用程序,但似乎在Android上失败.
我尝试将String转换为Date.
这是我的代码:
SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
Date date = format.parse("Sun Apr 08 16:37:00 CEST 2012");
Run Code Online (Sandbox Code Playgroud)
我得到例外:
04-08 13:51:36.536:W/System.err(8005):java.text.ParseException:Unparseable date:"Sun Apr 08 16:37:00 CEST 2012".
格式似乎没问题.我错过了什么吗?
谢谢.
MessageFormat类很酷,因为我们可以插入参数并直接使用它进行格式化.这使我能够直接在消息包属性文件中轻松覆盖日期格式.
举个例子:
MessageFormat.format("Test inserting a date param here: {0,date,dd/MM/yyyy HH'h'mm} -> OK cool", new Date() );
Run Code Online (Sandbox Code Playgroud)
但是,如果我需要在不同的时区显示日期怎么办?
我知道我可以在将它们注入我的包中之前格式化所有日期,但是格式化每个显示的日期都很麻烦...
在工作中我们正在使用
org.springframework.context.support.ReloadableResourceBundleMessageSource
我可能会尝试覆盖它并创建我自己的MessageFormat,它会考虑使用好的时区.但它可能不适合我们的架构.
你还有其他选择吗?
我正在开发一个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) 如何使用一些DateFormat解析这样的字符串?
7月24日星期三
据我所知,没有任何内容SimpleDateFormat.
我有一个字符串,可能包含以下任何格式的日期:
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) 我正在尝试将以下字符串解析为Date对象:
2013-12-26T01:00:56.664Z
Run Code Online (Sandbox Code Playgroud)
使用这个SimpleDateFormat:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
Run Code Online (Sandbox Code Playgroud)
但是我得到了:
java.text.ParseException: Unparseable date: "2013-12-26T01:00:56.664Z" (at offset 19)
Run Code Online (Sandbox Code Playgroud)
我做错了什么,我该如何处理日期中T的Z字母?
有人可以解释为什么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) 我尝试使用这个功能,但它不适用于这种情况'12/05/201a'有人知道为什么会发生这种情况?
在我的测试中,我使用了这个 System.out.println(isThisDateValid("12/05/201a", "dd/MM/yyyy"));,答案是,true但我预计结果将是假的,因为年份包含字母.
public static boolean isThisDateValid(String dateToValidate, String dateFromat)
{
if (dateToValidate == null)
{
return false;
}
SimpleDateFormat sdf = new SimpleDateFormat(dateFromat);
sdf.setLenient(false);
try
{
//if not valid, it will throw ParseException
Date date = sdf.parse(dateToValidate);
System.out.println(date);
} catch (ParseException e)
{
e.printStackTrace();
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud) java ×10
simpledateformat ×10
android ×4
date ×4
parsing ×3
date-format ×2
date-parsing ×1
datetime ×1
spring ×1