使用SimpleDateFormat解析ISO8601的日期和时间时,我遇到了一个奇怪的问题.相关代码是:
public class DateHelper
{
private static SimpleDateFormat iso8601formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
public static Date parseISO8601(String date) throws ParseException
{
Date result = iso8601formatter.parse(date);
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
对于输入我给它一个字符串
2010-09-06T15:30:00+02:00
Run Code Online (Sandbox Code Playgroud)
作为回报,我得到一个Date对象,日期设置为2010年1月6日,时间为13:30,时区为GMT + 00:00.
编辑:我也尝试使用"2010-09-06T15:30:00 + 0200",结果相同.
令人困惑的是,日期设置部分正确,只是月份设置错误.
问题显示在Android 1.6和Android 2.2上.
我该如何解决?
这可能是一个愚蠢的问题,但我不懂java日期函数.这是一些代码:
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm");
Date s = sdf.parse(var);
Calendar scal = java.util.GregorianCalendar.getInstance();
scal.setTime(s);
Log.w("Time: ", Long.toString(s.getTime()));
Run Code Online (Sandbox Code Playgroud)
如果var ="10:00",我得到"64800000".
如果var ="11:00",我得到"68400000".
如果var ="12:00",我得到"28800000".
如果var ="13:00",我得到"75600000".
如果var ="14:00",我得到"79200000".
如果var ="00:00",我得到"28800000".
什么是12:00?为什么,当var = 12:00时,我得到与00:00时相同的结果?所有其他结果似乎都是正确的.我显然不理解java日期函数,但我似乎无法在任何地方找到任何解释.这搞砸了我的时间跨度计算器.
正如我已经解释过的那样,当用户在JXDatePicker中编辑日期时,他可以选择,天气他再次以相同的格式输入它,默认情况下是dd.MM.yyyy或者只是dd.MM.yy .当他使用短形式时,我希望Picker选择当前的世纪.
例:
27.01.2012 edited to 27.01.10 should result in 27.01.2010
Run Code Online (Sandbox Code Playgroud)
以及:
27.01.2012 edited to 27.01.2010 should also result in 27.01.2010
Run Code Online (Sandbox Code Playgroud)
默认情况下,JXDatePicker以下列方式处理它:
27.01.2012 edited to 27.01.10 results in 27.01.0010
Run Code Online (Sandbox Code Playgroud)
这不是我希望它工作的方式.经过一些简短的研究后,我在SimpleDateFormat中找到了以下方法
/**
* Sets the 100-year period 2-digit years will be interpreted as being in
* to begin on the date the user specifies.
*
* @param startDate During parsing, two digit years will be placed in the range
* <code>startDate</code> to <code>startDate + 100 years</code>.
*/
public void set2DigitYearStart(Date startDate) …Run Code Online (Sandbox Code Playgroud) 我有这样的日期输入日期:{ts'2012-08-13 02:30:01'}
我相信我可以用单引号来逃避无效部分,但我在无效部分中有一个单引号.我怎么逃避?我尝试了几种模式,但它不起作用.
谢谢,
DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy' 'HH:mm:ss");
Date d = (Date)formatter.parse(dateTime);
System.out.println("date in controller "+d);
Run Code Online (Sandbox Code Playgroud)
我把输出作为
日期在控制器Mon Dec 31 16:04:57 IST 2012
请建议一种以MM/dd/yyyy HH:mm:ss格式输出日期的方法.需要以日期格式输出而不是字符串,以便将输出存储datetime在mysql db 中的字段中
我正在尝试从字符串转换为日期。例如:2013年9月4日,星期三,下午5:07
我首先将其转换为:2013年9月4日,星期三,5:07 PM
并使用以下代码:
SimpleDateFormat format = new SimpleDateFormat("EEEE, MMMM d, yyyy 'at' hh:mm a");
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字母?
我试图将输入字符串日期解析为Date.它无法检测输入中的AM/PM标签.它应该增加指定日期和返回日期的时间.但它无法解析AM/PM标签.03:00 PM在日期中解析为03:00:00.应该是15:00:00.
输出:日期:星期二12月22日03:00:00 UTC 2015日历:星期二12月22日星期二11:15:00结果:2015-12-22 11:15 AM
我使用错误的日期格式吗?
这是我的代码:
import java.util.*;
import java.text.*;
public class Main {
public static void main(String[] args) throws Exception {
System.out.println("Result : "+Main.addHoursToDate("2015-12-22 03:00 `enter code here`PM",8,15,0));
}
public static String addHoursToDate(String date, int hoursToAdd, int minsToAdd, int secToAdd){
String result = "";
try{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm aa");
Date dt = sdf.parse(date);
System.out.println("Date : " + dt.toString());
Calendar cl = Calendar.getInstance();
cl.setTime(dt);
cl.add(Calendar.HOUR_OF_DAY, hoursToAdd);
cl.add(Calendar.MINUTE, minsToAdd);
cl.add(Calendar.SECOND, secToAdd);
SimpleDateFormat dfCal = new …Run Code Online (Sandbox Code Playgroud) DateFormat formatter = new SimpleDateFormat("hh:mmaa");
formatter.parse("01:20pm")
Run Code Online (Sandbox Code Playgroud)
我试图以01:20 pm的格式解析时间.如果我运行上面的代码,我会得到以下异常:
java.text.ParseException: Unparseable date: "01:20pm"
at java.text.DateFormat.parse(DateFormat.java:366)
Run Code Online (Sandbox Code Playgroud)
至于我在SimpleDateFormat构造函数中放置的格式,我没有看到任何错误.这里出了什么问题?
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, new Locale("SV", "SE"));
((SimpleDateFormat) dateFormat).toPattern();
Run Code Online (Sandbox Code Playgroud)
在Java 8中,这一行在"yyyy-MM-dd"Java 9中生成"y-MM-dd".
这对我们的遗留代码有一些严重的问题,是否有某种方法可以恢复行为?