【问题标题】:Date not printing correct Time Android日期未打印正确时间 Android
【发布时间】:2015-08-04 12:28:03
【问题描述】:

我想打印从字符串获取的日期的时间(小时:分钟:秒)。

我有一个带有下一个值的字符串:

String dateStr = "Tue, 04 Aug 2015 12:09:10 GMT"

我将其解析为日期:

SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.ENGLISH);
Date d = format.parse(dateStr);

但是当我尝试获取小时、分钟和秒时,我得到了不同的值:

System.out.println("The current time is: " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds());

打印:“当前时间是:9:9:10”

怎么了?不应该打印“当前时间是:12:9:10”吗?

谢谢:)


更多信息:

当我创建日期时,它会自动将时区设置为 GMT-03:00 2015,这就是打印时间减少 3 小时的原因。如何设置时区?

【问题讨论】:

  • 注意你正在使用的所有不推荐使用的方法......使用日历对象并设置你已经阅读的日期时间,然后使用Calendar.get(Calendar.XXXXXXX)方法:SimpleDateFormat sdf = new SimpleDateFormat("FORMAT HERE", Locale.EN_US); cal.setTime(sdf.parse("DATE HERE")); System.out.println(cal.get(Calendar.MINUTE));
  • 是的,可能使用Date以外的方式可以解决问题。你能把你的完整解决方案放在答案中吗?
  • 你有没有注意到这正是你从蒙得维的亚到格林威治标准时间的差别?
  • 是的,我注意到了。那我的代码有什么问题?为什么我得到 GMT-3?是因为格式吗?
  • 您在阅读格林威治标准时间后打印出乌拉圭日期。输出转换搞砸了。像这样创建一个日历:cal = new GregorianCalendar(Locale.ENGLISH, TimeZone.forName("GMT")); 并设置时间。它会起作用的。顺便说一句,名字可能不准确,因为我不在电脑旁

标签: android date


【解决方案1】:

试试这个,你会得到它

try {
        String dateStr = "Tue, 04 Aug 2015 12:09:10 GMT";

        SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss",Locale.getDefault());

        SimpleDateFormat formatTarget = new SimpleDateFormat("hh:mm:ss",Locale.getDefault());

        System.out.println("time " + formatTarget.format(format.parse(dateStr)));

    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

【讨论】:

  • 为@DiieBarcia 稍微解释一下parse() 似乎会删除时区信息,但format() 会保留它。 stackoverflow.com/questions/18122608/…
  • 我在这个答案中看到的是从未使用过“d”。我也试过了,只是得到 ParseException
  • 我已经测试了这段代码,然后才在这里发布。检查你在哪里得到 parseException
  • @DiieBarcia 我实际上运行了这个,它对我有用。
  • mmmm 对我不起作用:S 获取“java.text.ParseException: Unparseable date: "Tue, 04 Aug 2015 12:09:10 GMT" (at offset 0)"
【解决方案2】:
public static void main(String[] args) throws ParseException {
    String dateStr = "Tue, 04 Aug 2015 12:09:10 GMT";
    SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.ENGLISH);
    Date d = format.parse(dateStr);
    System.out.println("The current time is: " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds());
    Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"), Locale.ENGLISH);
    cal.setTime(d);
    System.out.println("The current time is: " + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE) + ":" + cal.get(Calendar.SECOND));
}

【讨论】:

  • 解决我的问题的最佳方法
【解决方案3】:

唯一的方法是从字符串源中删除GMT。因为这表明您想使用时区进行解析。之后,您必须删除 zzz 以及:

String dateStr = "Tue, 04 Aug 2015 12:09:10"

SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss", Locale.ENGLISH);
Date d = format.parse(dateStr);

System.out.println("The current time is: " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds());

【讨论】:

  • 第一个解决方案抛出 java.text.ParseException: Unparseable date: "Tue, 04 Aug 2015 14:16:25 GMT"(偏移量 26)。在第二个解决方案中,我遇到了与 getHours 相同的问题
  • 唯一的方法是从字符串源中删除GMT。因为这表明您想使用时区进行解析。之后,您还必须删除 zzz
【解决方案4】:

要打印当前时间,你可以使用这种方法

 Calendar c = Calendar.getInstance(); 
int seconds = c.get(Calendar.SECOND);
int minutes=c.get(Calendar.MINUTE);
int hour=c.get(Calendar.HOUR);
int noon=c.get(Calendar.AM_PM);
int day=c.get(Calendar.DAY_OF_WEEK);
int date=c.get(Calendar.DATE);
int month=c.get(Calendar.MONTH)+1;
int year=c.get(Calendar.YEAR);

String currentTime="当前时间为:"+String.valueOf(hour)+":"+String.valueOf(minutes)+":"String.valueOf(seconds);

你也可以从这个日历中使用日年月等

【讨论】:

  • 这应该是评论,而不是答案
  • 对不起兄弟,但我是新来的...需要 50 声望才能在问题中发表评论
  • OP 的问题有什么难理解的?他们举例说明了他们想要什么输出以及他们目前如何尝试实现这一目标。甚至还有相关的代码 sn-ps,对于大多数问题,我可以说的更多
  • @farhan678 解决方案:不要!
  • StackOverflow 不适用于参数
猜你喜欢
  • 2019-06-18
  • 2020-06-26
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多