标签: simpledateformat

时区,日历和SimpleDateFormat的奇怪问题

我们考虑以下代码:

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy", Locale.US);
long start = sdf.parse("10:30:00 30/09/2009").getTime();
long end = sdf.parse("10:30:00 30/10/2009").getTime();

Calendar c = Calendar.getInstance(Locale.US);
c.setTimeInMillis(start);
System.out.println("Start = " + c.getTime());
c.setTimeInMillis(end);
System.out.println("  End = " + c.getTime());
Run Code Online (Sandbox Code Playgroud)

运行此代码段时,我有以下输出:

Start = Wed Sep 30 10:30:00 CEST 2009
  End = Fri Oct 30 10:30:00 CET 2009
Run Code Online (Sandbox Code Playgroud)

为什么我会得到不同的时区?

请注意,如果我在8月设置第一个日期而在9月设置第二个日期,则输出将在两种情况下显示相同的时区:

long start = sdf.parse("10:30:00 30/08/2009").getTime();
long end = sdf.parse("10:30:00 30/09/2009").getTime();
Run Code Online (Sandbox Code Playgroud)

将显示:

Start = Sun Aug 30 10:30:00 CEST 2009
  End = Wed Sep 30 10:30:00 CEST …
Run Code Online (Sandbox Code Playgroud)

java calendar date simpledateformat

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

使用可变空格解析日期

我正在使用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
查看次数

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

我有时间以毫秒为单位.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中提取时区

我知道有关于此的几个问题.但是我遇到了特定日期模式的问题.这是一个例子:

20130401100000[-03:EST]
Run Code Online (Sandbox Code Playgroud)

我跟你说话是-03因为根据SimpleDateFormat文件它应该有4位数.我得到的最接近的模式是:

yyyyMMddHHmmss'['Z':'z']'
Run Code Online (Sandbox Code Playgroud)

但由于2位数它只是不起作用.这是我用于测试的代码示例:

public static void main(String[] args) throws ParseException {
    String input = "20130401100000[-03:EST]";

    DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss'['Z':'z']'");
    df.setTimeZone(TimeZone.getTimeZone("GMT"));    

    System.out.println(df.format(new Date()));
    System.out.println(df.parse(input));
}
Run Code Online (Sandbox Code Playgroud)

当我打印new Date()我得到这个:

20130528155734[+0000:GMT]
Run Code Online (Sandbox Code Playgroud)

但是当我尝试解析时,input我得到以下异常:

Exception in thread "main" java.text.ParseException: Unparseable date: "20130401100000[-03:EST]"
at java.text.DateFormat.parse(DateFormat.java:337)
at Teste.main(Teste.java:17)
Run Code Online (Sandbox Code Playgroud)

有谁知道我怎么能用正确的解析input成一个?DateTimeZone

java timezone simpledateformat

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

计算两次android之间的差异

我正在开发和Android应用程序,我需要计算两次之间的差异.我需要计算24小时的时差,以及两天的时间差(例如今天下午5点到明天上午9点).

我尝试了以下代码,计算仅适用于24小时的差异,

String dateStart = "08:00:00";
String dateStop = "13:00:00";

//HH converts hour in 24 hours format (0-23), day calculation
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");

Date d1 = null;
Date d2 = null;

try 
{
    d1 = format.parse(dateStart);
    d2 = format.parse(dateStop);

    //in milliseconds
    long diff = d2.getTime() - d1.getTime();
    long diffHours = diff / (60 * 60 * 1000) % 24;
    Log.e("test",diffHours + " hours, ");
}
catch (Exception e) 
{
    // TODO: handle exception
} 
Run Code Online (Sandbox Code Playgroud)

java time android date simpledateformat

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

在java中获取一周的第一个日期

我想获取一周的第一个日期.

我的输入将是像2014年7月26日的字符串类型".

我需要获得上述日期(2014年7月26日)的第一周日期.

我需要MM/dd/YYYY格式的输出日期.

基本上我需要输出为07/21/2014.

请给我java程序.我已经做到了这一点

SimpleDateFormat formatter1 = new SimpleDateFormat("MM/dd/yy");
String date ="07/26/2014";
    Date Currentdate = formatter1.parse(date);
    int currentday=Currentdate.getDay();


        Calendar calendar = Calendar.getInstance();
        calendar.setTime(Currentdate);
        int startDay=currentday-calendar.getFirstDayOfWeek();
        Currentdate.setDate(contacteddate.getDate()-startDay);
        System.out.println(contacteddate.getDate());
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码只给我一个日期..我需要在"MM/dd/YYYY"中的日期和月份和年份请帮助

java datetime calendar date simpledateformat

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

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

我试图读取一个代表希腊日期时间的字符串(如"28Μαρτίου2014,14:00")使用SimpleDateFormat,但它会引发java.text.ParseException: Unparseable date: "28 ??????? 2014, 14:00"错误.

这是一个示例代码:

Locale locale = new Locale("el-GR");
SimpleDateFormat formatter = new SimpleDateFormat("dd MMMM yyyy, HH:mm", locale);
try {
     sDate = (Date) formatter.parse("28 ??????? 2014, 14:00");
 } catch (ParseException ex) {
     ex.printStackTrace();
 }
Run Code Online (Sandbox Code Playgroud)

我也试过locales el和el_GR,但没有运气.

有什么建议?

java locale simpledateformat

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

在Java中解析ISO 8601日期格式,如2015-06-27T13:16:37.363Z

我正在尝试解析一个String使用SimpleDateFormat.

这是我目前的代码:

public String getCreatedDateTime() {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-ddEHH:mm:ss.zzzz");
    try {
        Date date = simpleDateFormat.parse("2015-06-27T13:16:37.363Z");
        return date.toString();
    } catch (ParseException e) {
        return "Error parsing date";
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我只是在parse()方法中放置一个常量用于测试目的.

所以,这就是我要解析的内容:

2015-06-27T13:16:37.363Z

这是SimpleDateFormat我使用的模式:

YYYY-MM-ddEHH:MM:ss.zzzz

我一直得到ParseException.

我知道这可能是因为最后的.zzzz,但我不知道.363Z可能代表什么,所以我只是使用了一些随机字母.馊主意.

我会非常感谢你的帮助.谢谢!

java date iso8601 simpledateformat

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

SimpleDateFormat忽略字符

我正在使用a SimpleDateFormat,我从两个不同的来源获得结果.一个源使用该格式"yyyy-MM-dd HH:mm:ss",而另一个使用"yyyy-MM-ddTHH:mm:ssZ".我对从第二种格式获取时区('Z'值)不感兴趣,有没有一种方法可以获得这些时间而不使用不同的格式字符串?有些东西会忽略中间字符以及之后的字符'ss'.

java date simpledateformat

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