将 UTC 日期转换为当前时区

2023-12-10

我必须将这种格式“2016-09-25 17:26:12”的 UTC 日期转换为 Android 的当前时区。我这样做了:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date myDate = simpleDateFormat.parse(temp.getString("date"));
System.out.println(mydate.toString());

这有效,但我不知道为什么它也打印“GMT+02:00”。 这是输出:“Sun Sep 25 19:26:12 GMT+02:00 2016”,我不想显示“GMT+02:00”。

编辑,解决方案的代码:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
SimpleDateFormat outputSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date myDate = simpleDateFormat.parse(temp.getString("date"));
System.out.println(outputSdf.format(myDate));

tl;dr

LocalDateTime.parse( "2016-09-25 17:26:12".replace( " " , "T" ) )
             .atZoneSameInstant( ZoneId.systemDefault() )
             .format( DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM ) )

避免遗留日期时间类

您正在使用与最早版本的 Java 捆绑在一起的麻烦的旧日期时间类。现在被 java.time 类取代。

ISO 8601

您输入的字符串几乎符合标准ISO 8601java.time 类默认使用的格式。将中间的空格替换为T.

String input = "2016-09-25 17:26:12".replace( " " , "T" );

LocalDateTime

输入缺少任何指示与 UTC 的偏移量 or 时区。所以我们解析为LocalDateTime.

LocalDateTime ldt = LocalDateTime.parse( input );

OffsetDateTime

您声称从应用程序的上下文中知道该日期时间值的目的是UTC。所以我们将该偏移量指定为常量ZoneOffset.UTC成为一个OffsetDateTime.

OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC );

ZonedDateTime

您还说您希望将此值调整为用户 JVM(或本例中的 Android 运行时)的当前默认时区。知道这个默认值可以随时更改during您的应用程序的执行。如果时区很重要,您应该明确询问用户所需/预期的时区。这ZoneId类代表一个时区。

ZoneId z = ZoneId.systemDefault(); // Or, for example: ZoneId.of( "America/Montreal" )
ZonedDateTime zdt = odt.atZoneSameInstant( z );

生成字符串

你说你想生成一个字符串来表示这个日期时间值。您可以指定任何您想要的格式。但通常最好让 java.time 根据定义的人类语言和文化规范自动为您本地化。Locale目的。使用FormatStyle指定长度或缩写(FULL, LONG, MEDIUM, SHORT).

Locale locale = Locale.getDefault();  // Or, for example: Locale.CANADA_FRENCH
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM ).withLocale( locale );
String output = zdt.format( f );

关于 java.time

The java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧日期时间类,例如java.util.Date, .Calendar, & java.text.SimpleDateFormat.

The 乔达时间项目,现在在维护模式,建议迁移到 java.time。

要了解更多信息,请参阅甲骨文教程。并在 Stack Overflow 上搜索许多示例和解释。

许多 java.time 功能都向后移植到 Java 6 和 7三十后端口并进一步适应Android in 三十ABP (see 如何使用…).

The 三十额外项目通过附加类扩展了 java.time。该项目是 java.time 未来可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如Interval, YearWeek, YearQuarter, and more.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 UTC 日期转换为当前时区 的相关文章

随机推荐

  • 使用反射将属性动态转换为其实际类型(其中实际类型是通用的)

    这是一个略有不同的问题here 我将相同的代码修改为我的需要 如下所示 using System using System Collections Generic using System Linq using System Reflect
  • 由于类型转换而未使用索引?

    由于对特定表进行全表扫描 我有一个进程表现不佳 我计算了统计数据 重建了现有索引并尝试为此表添加新索引 但这并没有解决问题 隐式类型转换可以停止使用索引吗 其他原因又如何呢 全表扫描的成本比索引查找的成本大约高 1000 EDIT SQL语
  • 从 parse.com 检索图像

    我不知道这是否可能 但我认为这是可能的 但我不知道该怎么做 我只是想从 parse com 加载图像 就像从 parse com 检索对象一样 我应该像从 parse com 获取字符串一样进行操作吗 我刚刚找到了如何在解析时保存图像 但没
  • 如何制作输出目录选择面板?

    您好 我正在尝试制作一个窗格 在我的计算机中显示类似 Windows 资源管理器的内容 当用户完成操作后 当他想要将编辑后的图像保存在磁盘上的特定位置时 他可以轻松地从该窗格中选择目录 我想设计这样的东西 可以做类似的事情吗 我的图片编辑器
  • pandas pytables 附加:性能和文件大小的增加

    我有500多个PyTables每个存储大约包含 300Mb 的数据 我想使用 pandas 将这些文件合并到一个大商店中append如下面的代码所示 def merge hdfs file list merged store for fil
  • 如何将 ruby​​gem 条件要求添加到 gem 规范中?

    仅当用户使用特定版本的 ruby 时才可以添加 gem 依赖项吗 背景 我正在研究一个项目的分支使用 Test Unit Autorunner 等 它们是 ruby 1 8 中标准库的一部分 但不是 1 9 1 中标准库的一部分 而是位于
  • python 列表,向列表添加一些内容会改变整个内容?

    所以我试图在Python中实现选择排序 并且我将每次迭代的结果附加到一个列表中以在最后打印 我的代码正确地对数字列表进行排序 但是当我将它附加到最后的同一个列表中时更改所有其他列表 def s sort numbers alist do a
  • 计算出勤时间差

    我有一个包含以下示例输出的表格 UserID Checktime CheckStatus 3175 2013 12 22 07 02 10 000 I 3175 2013 12 22 13 01 01 000 O 3175 2013 12
  • 针对特定图像的 CSS

    我正在寻找一种使用 CSS 定位特定图像的方法 如果可能的话 我正在运行一个 CMS 用户可以在其中上传图像并将其放在他们的页面上 我想要一种定位具有特定尺寸的图像的方法 所以问题是 你可以让 css 行针对具有特定尺寸规格的图像或对象吗
  • 使用 LocalStorage 保存和加载购物车

    我有以下代码 inames iqtyp iprice function bestel inames push document getElementById artikel innerHTML iqtyp push parseInt doc
  • C - strtok(...) 上出现意外的分段错误

    我正在使用库的 strtok 它似乎工作正常 直到结束条件 它导致分段错误和程序崩溃 API 声称 当找不到更多标记时 strtok 将输出 NULL 这意味着 我认为 您必须捕获此 NULL 才能终止使用 strtok 运行的任何循环 我
  • Android 来电事件

    我想创建一个 onCall 事件 我已经知道没有这样的方法 但基本上我想做的是 当接到来电时 弹出 Toast 或其他任何内容 任何类型的教程或示例代码都会有帮助 多谢 Use PhoneStateListener它已经重写了方法onCal
  • 如何确定 ARM 处理器是运行在通常的锁定“世界”中还是运行在 Secore“世界”中?

    例如 virt what显示您是否在硬件虚拟化 沙箱 内运行 如何检测您是否在 ARM TrustZone 沙箱中运行 信任区也许与你想象的不同 有一系列模式 从 可信功能的简单 API 到在每个世界中运行的 双操作系统 如果该问题有更多背
  • Objective-C:正确保留 3 位小数

    我正在尝试将浮点值降低到小数点后第三位 例如 值 2 56976 应为 2 569 而不是 2 570 我搜索并找到了这样的答案 向下取小数点后两位数 这样的答案并不准确 例如代码 double value double unsigned
  • 序列化静态类?

    如果我们序列化静态类会发生什么 如果我们序列化静态类 是否可以创建多个静态类实例 Serializable public static class MyClass public static MyClass public static bo
  • PHP 用 vars 替换字符串中的通配符(%s、%d)

    我有翻译功能t var function t word return this gt words word where this gt words是数组 this gt words array word1 gt word word2 gt
  • 如何打印一年中的所有星期(或一年中的第一个星期一)

    如何打印从星期一开始到星期日结束的所有周 如下所示 使用 Zend date 1 04 Jan 2010 10 Jan 2010 2 11 Jan 2010 17 Jan 2010 3 18 Jan 2010 24 Jan 2010 首先找
  • MYSQL 选择往复数据?

    我有一张桌子叫Follow 具有三个字段 Id 自动增量整数 用户ID 整数 关注 整数 如果我有这样的数据 ID UserId Following 1 2 3 2 3 2 3 2 5 4 2 6 5 3 5 我如何找到用户 2 的朋友 即
  • Pandas groupby 然后应用 to_dict('records')

    假设我有以下数据框 df pd DataFrame a 1 1 1 2 b a a b c d 1 2 3 4 我想以下面的句子结束 1 b a d 1 b a d 2 b b d 3 2 b c d 4 基本上 我想分组a对于我想应用的每
  • 将 UTC 日期转换为当前时区

    我必须将这种格式 2016 09 25 17 26 12 的 UTC 日期转换为 Android 的当前时区 我这样做了 SimpleDateFormat simpleDateFormat new SimpleDateFormat yyyy