我正在使用Joda来解析日期并使用不使用前导零的格式,例如:
Mon Nov 20 14:40:36 2006
Mon Nov 6 14:40:36 2006
Run Code Online (Sandbox Code Playgroud)
请注意,dayOfMonth字段用空白填充.
目前我似乎必须使用两种不同的格式,如果一个失败则重新分析
"EEE MMM dd HH:mm:ss yyyy"
"EEE MMM d HH:mm:ss yyyy"
Run Code Online (Sandbox Code Playgroud)
是否有单一格式(或API开关)处理这两种情况?(SimpleDateFormat的答案是一样的 - 我不使用它?)
我正在使用以下模式和日期
日期:2007年13月13日
模式:dd-MM-yyyy
输出:Sun Jan 13 00:00:00 IST 2008或2008-01-13 00:00:00.0
我在这里期待例外.如果给定日期不正确,我该怎么做才能生成异常.
我有时间以毫秒为单位.1308700800000; 我需要把它转换成类似的东西 Jun 9'11 at 02:15 PM.
我试过用
SimpleDateFormat format = new SimpleDateFormat("MMM D'\''YY");
Run Code Online (Sandbox Code Playgroud)
但我得到一个例外:
Caused by: java.lang.IllegalArgumentException: Unterminated quote
Run Code Online (Sandbox Code Playgroud)
任何帮助将受到高度赞赏.
我遇到了一个我似乎无法解决的顽固问题.我已经在stackoverflow上寻找解决方案,并且发现了很多关于Java日期格式的帖子,但没有具体的问题.
基本上,我有一种情况需要将日期字符串转换为java.util.Date对象.我正在使用Date和SimpleDateFormat类.对于我遇到的大多数日期,它的工作正常.但是对于某些日期,它可以工作,但会改变实际日期.两个示例日期是:
2月24日星期五16:45:40太平洋标准时间 - >改为 - >星期五06月16日16:45:40太平洋标准时间2012年
2012年1月13日星期三10:00:42 - >更改为 - > Wed Jan 04 09:00:42 PST 2012
知道为什么日期会发生变化吗?有什么办法可以轻松避免这种情况或以不同的方式进行吗?我的代码复制如下.你可以尝试看看我在说什么.
提前致谢!
您可以使用以下JSP代码尝试此操作:
<%@ page import="java.util.*" %>
<%@ page import="java.net.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.text.*" %>
<%
String dateStr = "";
Date tmpDate = null;
DateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss z YYYY");
System.out.println("First Test ---------------");
dateStr = "Fri Feb 24 16:45:40 PST 2012";
tmpDate = (Date) formatter.parse(dateStr);
System.out.println("Original:"+dateStr+":");
System.out.println("Date Obj:"+tmpDate.toString()+":");
System.out.println("Second Test --------------");
dateStr = "Wed …Run Code Online (Sandbox Code Playgroud) 我从服务器获取此字符串:
[
{
"title":"spoil the ones u love today",
"startDateTime":"2014-08-10T20:10:36.7158Z"
},
{
"title":"home made patisserie",
"startDateTime":"2014-08-10T20:08:45.0218Z"
}
]
Run Code Online (Sandbox Code Playgroud)
我试着解析它一个对象
public class Offer implements Serializable {
public String title;
public Date startDateTime;
}
Type collectionType = new TypeToken<ArrayList<Offer>>() {}.getType();
mOffersList.addAll((Collection<? extends Offer>) gson.fromJson(result, collectionType));
Run Code Online (Sandbox Code Playgroud)
但是当我将"startDate"定义为Date时
我从gson回来的系列是空的
当我将"startDate"定义为String时
集合正确填充.
我想更改其日期格式.这就是我喜欢将它保存为Date对象的原因.
我试过了
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").create;
然而Gson无法解析服务器的字符串
Date startDateTime.没有添加任何东西mOffersList,它保持空白.
我究竟做错了什么?
请参阅以下代码:
String timeString = "1980-01-01T14:00:00+0300";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
Date date2 = sdf.parse(timeString);
// sdf.getCalendar().get(Calendar.ZONE_OFFSET);
System.out.println(sdf.format(date2));
Run Code Online (Sandbox Code Playgroud)
现在,我正处于一个+2h偏移,+1夏令时(目前)的国家.如果我按原样运行此代码,它将打印出来
1980-01-01T13:00:00+0200
Run Code Online (Sandbox Code Playgroud)
如果我取消注释询问日历偏移量的行,则程序的输出为
1980-01-01T14:00:00+0300
Run Code Online (Sandbox Code Playgroud)
知道为什么会发生这种情况,我怎样才能获得一致的输出?
为了避免任何不清楚的事情:因为我正在处理一些遗留代码,所以java 8不是一个选项.是的,这里的关键点是为什么,而不是解决方法是什么?有2个为什么:
我正在尝试获得一系列日期,而我的输入是'from'/'to'结构.所以我的意见是:
String date1 = "2014-01-01";
String date2 = "2014-05-01";
Run Code Online (Sandbox Code Playgroud)
我的输出应该是一个Arraylist,所有日期都在date1和date2之间.我已经找到了这个,但我只能找到两个日期之间差异的问题:
SimpleDateFormat myFormat = new SimpleDateFormat("dd MM yyyy");
String inputString1 = "23 01 1997";
String inputString2 = "27 04 1997";
try {
Date date1 = myFormat.parse(inputString1);
Date date2 = myFormat.parse(inputString2);
long diff = date2.getTime() - date1.getTime();
System.out.println ("Days: " + TimeUnit.DAYS.convert(diff,TimeUnit.MILLISECONDS));
} catch (ParseException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
任何提示或建议?所有其他问题都适用于iOS或SQL.
我们有一个Calendar类对象:
Calendar calendar = Calendar.getInstance();
Run Code Online (Sandbox Code Playgroud)
我们有一个SimpleDateFormat对象,格式如下:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd");
String longDate = dateFormat.format(calendar.getTime());
Run Code Online (Sandbox Code Playgroud)
所以我们得到了当前的日期longDate.现在我想获得当前年份,但我想重用该dateFormat对象.有什么办法吗?我知道我最初可以格式化类,如:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-yy");
Run Code Online (Sandbox Code Playgroud)
然后从结果字符串中获取结果,但我想重用该dateFormat对象来获得年度结果.
我遵循了代码(简化为专注于问题).使用SimpleDateFormat模式打印时区信息.
你知道为什么z在不同的机器上被区别对待吗?如果有办法告诉Java在所有机器上统一对待它?
此类正在JavaMail中使用,这导致我们的电子邮件标头包含不符合RFC 2822的时间.
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class DateFormatTest {
String PATTERN = "z";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(this.PATTERN);
public static void main(final String[] args) {
new DateFormatTest().printTimezone();
}
public void printTimezone() {
System.out.println(this.simpleDateFormat.format(Calendar.getInstance().getTime()));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:Windows/Mac
PDT
Run Code Online (Sandbox Code Playgroud)
输出:Linux(CentOS Linux版本7.5.1804(核心版))/ Ubuntu 14/18
GMT-07:00
Run Code Online (Sandbox Code Playgroud) 我在整个网站上搜索过,但我认为我有一个稍微不同的问题,在我出现心力衰竭或烧坏计算机之前可以真正做些帮助.
我动态生成月份名称列表(以2011年6月,2011年7月的形式),显然我希望这对区域设置敏感:因此我使用简单的日期格式对象,如下所示:
//the actual locale name is dependent on UI selection
Locale localeObject=new Locale("pl");
// intended to return full month name - in local language.
DateFormat dtFormat = new SimpleDateFormat("MMMM yyyy",localeObject);
//this bit just sets up a calendar (used for other bits but here to illustrate the issue
String systemTimeZoneName = "GMT";
TimeZone systemTimeZone=TimeZone.getTimeZone(systemTimeZoneName);
Calendar mCal = new GregorianCalendar(systemTimeZone); //"gmt" time
mCal.getTime(); //current date and time
Run Code Online (Sandbox Code Playgroud)
但如果我这样做:
String value=dtFormat.format(mCal.getTime());
Run Code Online (Sandbox Code Playgroud)
这个"应该"返回月份名称的本地化版本.在波兰语中,"九月"这个词是"Wrzesień" - 请注意n上的重音.然而我回来的只是"Wrzesie?"
我究竟做错了什么?
感谢所有 - 我现在接受这是一个演示问题 - 但我怎样才能安全地"读取"dtFormat的结果 - 我使用getBytes等在ref下面添加了一些注释 …
java ×10
simpledateformat ×10
date ×6
datetime ×2
calendar ×1
gson ×1
jakarta-mail ×1
jodatime ×1
json ×1
localization ×1
milliseconds ×1
string ×1
timeunit ×1