首页 > 其他分享 >一次日期转换遇到的问题

一次日期转换遇到的问题

时间:2023-08-03 17:46:45浏览次数:29  
标签:00 转换 遇到 MM dd HH yyyy mm 日期

在一次时间解析的时候,碰到了2023-08-03T01:30:49.000+00:00这种格式的时间,这种时间是UTC时间格式,T代表分隔符,.000是毫秒值,+00:00代表时区偏移量,+00:00 表示 UTC 时间,就是时区

使用的日期格式为 yyyy-MM-dd'T'HH:mm:ss.SSSZSSS是毫秒值,Z是时区偏移量

然后正常的操作是

  • 创建一个格式为yyyy-MM-dd'T'HH:mm:ss.SSSZ的日期格式化类,比如DateTimeFormatter

  • 创建一个日期类来接受格式化后的日期,这里用到LocalDateTime

  • 调用LocalDateTime.parse完成字符串转换和格式化

  • 如果时区不一样,还需要转时区

String dateTimeString = "2023-08-03T01:30:49.000+00:00";
DateTimeFormatter parser = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
LocalDateTime utc0Date = LocalDateTime.parse(dateTimeString, parser);
System.out.println(utc0Date);

但是报错了

Text '2023-08-03T01:30:49.000+00:00' could not be parsed at index 23

证明这个日期的格式和yyyy-MM-dd'T'HH:mm:ss.SSSZ不符

应该是用yyyy-MM-dd'T'HH:mm:ss.SSSXXX这个格式

yyyy-MM-dd'T'HH:mm:ss.SSSXXXyyyy-MM-dd'T'HH:mm:ss.SSSZ的区别是:

  • yyyy-MM-dd'T'HH:mm:ss.SSSXXX格式包含时区偏移量

    例如+08:00表示东8区,-05:00表示西5区。这种格式可以处理包含时区信息的日期时间字符串,如2023-08-03T01:30:49.000+08:00

  • yyyy-MM-dd'T'HH:mm:ss.SSSZ格式使用Z表示UTC时间,它只能表示固定的时区标识

    例如+0800表示东8区,-0500表示西5区。这种格式适用于没有具体时区偏移值,只有时区标识的日期时间字符串,如2023-08-03T01:30:49.000+0800

简单来说就是多了个时区部分多了一个:的区别

更新的代码

String dateTimeString = "2023-08-03T01:30:49.000+00:00";
DateTimeFormatter parser = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
//时区转换类
ZonedDateTime utcDateTime = ZonedDateTime.parse(dateTimeString, parser);
//切换时区
ZonedDateTime utc8DateTime = utcDateTime.withZoneSameInstant(ZoneId.of("UTC+8"));
//转换成LocalDateTime
LocalDateTime localDateTime = utc8DateTime.toLocalDateTime();

System.out.println(localDateTime);

标签:00,转换,遇到,MM,dd,HH,yyyy,mm,日期
From: https://www.cnblogs.com/aruo/p/17603994.html

相关文章

  • Excel中文本型数字转换为数值型数字的方法
    背景工作中经常遇到需要将Excel中的内容进行求和或者其他计算,但是由于格式为文本,无法进行计算和求和。单元格的左上角都有绿色小三角,且用自动求和公式计算无法计算结果,显示为0,说明单元格格式为文本。1、直接将文本转化成数字需要转换的数据,左上角会出现黄色感叹号,点击,并选择......
  • const char * 与 char * 不兼容,QString转换时出现的问题
    QStringcameraIniPath=QString::fromLocal8Bit(m_sCameraIniPath[nIndex]);方式一(char*)cameraIniPath.toStdString().c_str()方式二charsDirPath[200];sprintf_s(sDirPath,"%s",cameraIniPath.toLocal8Bit().constData());//QString转char*方式三VS......
  • 使用redis-py的两个类Redis和StrictRedis时遇到的坑
    redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令(比如,SET命令对应与StrictRedis.set方法)。Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。简单说,官方推荐使用StrictRedis方法。  不推荐Redis类,原......
  • Java入门题-输入一个字母,判断是不是大写,是直接输出,不是转换成大写输出
    重要:利用ASCII码判断字母是否是大小写需要引用Scanner方法 代码:importjava.util.Scanner;1、利用char数组转化的优点在于面对字符串,也可以批量对单个字符操作Scannerget_letter=newScanner(System.in);StringgetLetter=get_letter.next();charss[]=getLetter.to......
  • IU5530支持48V输入,输出12V-24V,3.5A异步降压DC-DC转换器
    IU5530E是一款具有集成型高侧MOSFET的48V、3.5A降压稳压器。能够耐受的抛负载脉冲高达50V。一个低纹波脉冲跳跃模式将无负载时的电源电流减小至180μA。当启用引脚被拉至低电平时,关断电源电流被减少至4μA。欠压闭锁在内部设定为4.3V,但可用使能引脚将之提高。可在内部控制输出电压......
  • 振弦传感器信号转换器应用山体滑坡安全监测
    振弦传感器信号转换器应用山体滑坡安全监测随着人类文明的进步,自然灾害对人们的生活和财产安全造成的威胁也越来越大。山体滑坡作为自然灾害中的一种,给人们的生活和财产安全带来了极大的威胁。因此,进行山体滑坡的安全监测显得尤为重要。振弦传感器信号转换器在山体滑坡安全监测中......
  • 遇到:ValueError: not enough values to unpack (expected 2, got 1) 错误应该如何解决
    遇到"ValueError:notenoughvaluestounpack(expected2,got1)"错误时,通常是因为你在尝试解包(unpack)一个包含不足两个值的可迭代对象。要解决这个问题,你可以考虑以下几个步骤:检查可迭代对象的长度:确保你的可迭代对象包含至少两个值。如果你的可迭代对象只有一个值,那么解包......
  • 遇到:nodejs unhandledPromiseRejectionWarning 错误应该如何解决
    遇到"unhandledPromiseRejectionWarning"错误是因为在Node.js中,一个Promise被rejected了,但是没有被处理(handled)。这可能是因为你没有使用适当的错误处理机制,导致Promise的rejected状态没有被捕获。要解决这个问题,你可以考虑以下几个步骤:使用catch方法捕获错误:在你的......
  • C#调用Java MD5加密 转换成base64编码
    publicbyte[]GetUTF8(stringcontent){byte[]bytes=Encoding.UTF8.GetBytes(content);returnbytes;}publicbyte[]GetHash(byte[]sources){MD5CryptoServiceProviderMD5CSP=newMD5CryptoS......
  • AB实验遇到用户不均匀怎么办?—— vivo游戏中心业务实践经验分享
    作者:vivo互联网数据分析团队-LiBingchaoAB实验是业务不断迭代、更新时最高效的验证方法之一;但在进行AB实验效果评估时需要特别关注“用户不均匀”的问题,稍不注意,产出的研究结论就可能谬以千里,给业务决策带来极大风险。因此我们游戏业务针对该问题,借助霍金实验团队已经实现的分......