【问题标题】:Error in output while converting date format to AM/PM in Android在 Android 中将日期格式转换为 AM/PM 时输出错误
【发布时间】:2015-06-07 12:31:41
【问题描述】:

我正在将从服务器 yyyy-mm-dd hh:mm:ss 收到的日期转换为 dd-mm-yyyy hh:mm:ss am/pm

我写了以下代码来做到这一点..

SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.getDefault());
SimpleDateFormat outputFormat = new SimpleDateFormat("dd-MM-yyyy, hh:mm:ss a", Locale.getDefault());

 String out = "";
 inputFormat.setTimeZone(TimeZone.getTimeZone("UTC")); //Also tried GMT+00:00

 Date date = inputFormat.parse(str_date);

 outputFormat.setTimeZone(TimeZone.getDefault());
 out = outputFormat.format(date);

 L.c("The date format for " + str_date + " is " + out);

 return out;

一切正常,除非您在控制台日志下方注明上午 06:21:48、上午 06:09:44 并且很少有人显示上午而不是下午。

我的代码错了吗?还是有什么bug?

04-02 19:13:37.381    4815-4815/in.dummy.app D/ARR﹕ The date format for 2015-04-02 13:10:19 is 02-04-2015, 06:40:19 pm
04-02 19:13:37.414    4815-4815/in.dummy.app D/ARR﹕ The date format for 2015-04-02 13:02:22 is 02-04-2015, 06:32:22 pm
04-02 19:13:37.436    4815-4815/in.dummy.app D/ARR﹕ The date format for 2015-04-02 12:51:48 is 02-04-2015, 06:21:48 am
04-02 19:13:42.191    4815-4815/in.dummy.app D/ARR﹕ The date format for 2015-04-02 12:39:44 is 02-04-2015, 06:09:44 am
04-02 19:13:43.484    4815-4815/in.dummy.app D/ARR﹕ The date format for 2015-04-02 12:17:48 is 02-04-2015, 05:47:48 am
04-02 19:13:44.990    4815-4815/in.dummy.app D/ARR﹕ The date format for 2015-04-02 12:10:30 is 02-04-2015, 05:40:30 am
04-02 19:13:56.347    4815-4815/in.dummy.app D/ARR﹕ The date format for 2015-04-02 12:00:00 is 02-04-2015, 05:30:00 am
04-02 19:13:57.228    4815-4815/in.dummy.app D/ARR﹕ The date format for 2015-04-02 11:58:13 is 02-04-2015, 05:28:13 pm
04-02 19:13:57.467    4815-4815/in.dummy.app D/ARR﹕ The date format for 2015-04-02 11:55:18 is 02-04-2015, 05:25:18 pm
04-02 19:13:58.332    4815-4815/in.dummy.app D/ARR﹕ The date format for 2015-04-02 11:48:13 is 02-04-2015, 05:18:13 pm
04-02 19:13:58.563    4815-4815/in.dummy.app D/ARR﹕ The date format for 2015-04-02 11:42:28 is 02-04-2015, 05:12:28 pm
04-02 19:14:00.822    4815-4815/in.dummy.app D/ARR﹕ The date format for 2015-04-02 09:54:22 is 02-04-2015, 03:24:22 pm
04-02 19:14:01.009    4815-4815/in.dummy.app D/ARR﹕ The date format for 2015-04-01 11:30:33 is 01-04-2015, 05:00:33 pm

【问题讨论】:

  • 在将字符串解析为日期之前,您尝试在 UTC 中实际解析的字符串吗?如果您使用 UTC 进行转换,则需要以 24 小时格式 SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); 解析日期
  • @inner_class7 我猜..我从服务器接收它..它只是给我日期作为“2015-04-02 12:51:48”格式的字符串
  • @GaurawYadav 兄弟,我的问题是“输出错误”而不是如何将日期转换为 AM/PM
  • 服务器使用的是哪个时区?

标签: android date datetime


【解决方案1】:

实际上,您的代码中的日期转换正确,如下所示

输入日期:2015-04-02 13:10:19 // GMT+00:00

转换日期:02-04-2015, 01:10:19 PM // 使用 GMT+00:00

现在使用您的设备默认本地转换,因为您设置 outputFormat.setTimeZone(TimeZone.getDefault());

输出日期:02-04-2015, 06:40:19 pm // 使用您的设备区域设置。我认为您的设备 GMT+05:30

【讨论】:

  • 谢谢.. 我找到了解决方案,问题是我将传入日期 24 小时转换为 12 小时 SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.getDefault( )); // 它应该是 HH 而不是 hh..
【解决方案2】:

str_date 是 24 小时格式

小时(0-23), 上午/下午的小时 (1-12)

 SimpleDateFormat inputFormat = new SimpleDateFormat(
    "yyyy-MM-dd HH:mm:ss", Locale.getDefault());

【讨论】:

    猜你喜欢
    • 2016-02-25
    • 2021-03-19
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多