标签: simpledateformat

使用可变空格解析日期

我正在使用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的答案是一样的 - 我不使用它?)

java date jodatime simpledateformat

7
推荐指数
3
解决办法
5615
查看次数

SimpleDateFormat提供错误的日期而不是错误

我正在使用以下模式和日期

日期:2007年13月13日

模式:dd-MM-yyyy

输出:Sun Jan 13 00:00:00 IST 2008或2008-01-13 00:00:00.0

我在这里期待例外.如果给定日期不正确,我该怎么做才能生成异常.

java simpledateformat

7
推荐指数
1
解决办法
3007
查看次数

自定义日期和时间字符串,以毫秒为单位

我有时间以毫秒为单位.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)

任何帮助将受到高度赞赏.

java datetime datetime-format milliseconds simpledateformat

7
推荐指数
2
解决办法
3635
查看次数

String中的Java Date对象无法正常工作

我遇到了一个我似乎无法解决的顽固问题.我已经在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)

java string date simpledateformat

7
推荐指数
1
解决办法
1078
查看次数

gson无法使用GsonBuilder.setDateFormat进行解析("yyyy-MM-dd'T'HH:mm:ss.SSSZ")

我从服务器获取此字符串:

[
 {
  "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,它保持空白.

我究竟做错了什么?

java json date simpledateformat gson

7
推荐指数
1
解决办法
2万
查看次数

SimpleDateFormat行为不一致

请参阅以下代码:

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个为什么:

  1. 为什么我通过+0300 TZ,默认情况下我会收到+0200?(除非另有说明,否则SimpleDateFormat应始终使用TimeZone.getDefault).
  2. 为什么它只是因为我在它的日历实例上调用getter来给出不同的答案.

java simpledateformat

7
推荐指数
1
解决办法
129
查看次数

生成Java中两个给定日期之间的所有日期

我正在尝试获得一系列日期,而我的输入是'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.

java date simpledateformat timeunit

7
推荐指数
1
解决办法
4793
查看次数

如何在java中重用SimpleDateFormat类对象以获得不同的格式化答案

我们有一个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对象来获得年度结果.

java calendar date simpledateformat

7
推荐指数
1
解决办法
963
查看次数

Java SimpleDateFormat在不同的操作系统上以不同的方式解释'z'

我遵循了代码(简化为专注于问题).使用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)

java datetime date jakarta-mail simpledateformat

7
推荐指数
1
解决办法
126
查看次数

SimpleDateFormat本地化的月份名称

我在整个网站上搜索过,但我认为我有一个稍微不同的问题,在我出现心力衰竭或烧坏计算机之前可以真正做些帮助.

我动态生成月份名称列表(以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 localization simpledateformat

6
推荐指数
1
解决办法
9989
查看次数