当前位置: 首页 > 知识库问答 >
问题:

Dateformat给出不同的长时间

梁丘璞瑜
2023-03-14

我有两种日期格式,一种是字符串“yyyy-mm-dd'hh:mm:ss.sssz”,另一种是长的“yyyymmddhhmmsssss”。我想把它转换成这个格式“yyyy-mm-dd hh:mm:ss”,它转换成功了,但是当我打印date.getTime()时

对于第一个->1416490009109

用于秒->20141120121211800

代码:

private DateTimeFormatter formater,formater1;
private SimpleDateFormat formate,formate1,formate2;

String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
String pattern1 = "yyyy-MM-dd HH:mm:ssZ";
//String pattern = "yyyy-MM-dd HH:mm:ss";
formate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
formate1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
formate2 = new SimpleDateFormat("yyyyMMddHHmmssSSS");
formater = DateTimeFormat.forPattern(pattern);
formater1 = DateTimeFormat.forPattern(pattern1);

String dateTime = "2011-11-20'T'11:42:12.672+00:00";
long savePoint = 20141120114212672L;

try {
    datetime = formater.parseDateTime(dateTime);
    date = datetime.toDate();
    //Log.d("Android: ", "Date  formate: "+datetime);
    dt = formate.format(date.getTime());
    Log.d("Android: ", "date Keys1:   "+date.getTime());
} catch (Exception e) {
    Log.d("Android: ", "Error: "+e);
}

对于第二个

try {
    String[] tzone = dateTime.split("[+]");
    String times = formate1.format(Long.parseLong(savePoint));
    datetime = formater.parseDateTime(times+"+"+tzone[tzone.length-1]);
    date = datetime.toDate();
    dt = formate.format(date.getTime());
} catch (Exception e) {
    Log.d("Android:", "Error:  "+e);
}

共有1个答案

景阳曜
2023-03-14

第一个输入似乎是从以UTC为单位的1970年第一时刻的历元基准开始的毫秒计数。

使用integer.parselong将字符串解析为long

long count = Long.parseLong( "1416490009109" ) ;
Instant instant = Instant.ofEpochMilli( count ) ; 

为了获得更大的灵活性,例如以各种格式生成文本,请转换为offsetdatetimezoneddatetime

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) :

您的第二个输入看起来是一个年、月、日、小时、分钟、秒、小数秒的字符串,伪装成一个长整数。

String input = "20141120121211800" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuuMMddHHmmssSSS" ) ;
LocalDateTime ldt = LocalDateTime.parse( input , f ) ;

如果确定已知,则指定时区或与UTC的偏移量。

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

我想把它转换成这种格式“yyyy-mm-dd hh:mm:ss”

若要以所需格式从日期-时间对象生成文本,请使用DateTimeFormatter类。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ) ;
String output = odt.format( f ) ;

Java.time框架内置在Java8和更高版本中。这些类取代了麻烦的旧的遗留日期-时间类,如java.util.dateCalendar、&SimpleDateFormat

要了解更多信息,请参阅Oracle教程。并搜索堆栈溢出以获得许多示例和解释。规范是JSR310。

  • Java SE 8、Java SE 9、Java SE 10、Java SE 11和更高版本--带有捆绑实现的标准Java API的一部分。
    • 大部分Java.time功能都以threeten-backport的方式后端移植到Java6&7。
    • java.time类的Android捆绑实现的更高版本。
    • 对于早期的Android(<26),ThreeTenABP项目适用于ThreeTen-Backport(上面提到)。查看如何使用ThreeTenabp…。

 类似资料:
  • 问题内容: 当我运行此代码时: 我在Eclipse的JUnit运行程序中得到以下结果: 这导致从命令行Maven: 如您所见,时间有所不同。 (同一台计算机,相同的Java版本,可能相隔30秒)。为什么? [编辑] 时区也不同。从Maven 启动和从Eclipse 启动时,为什么要使用Java ? 或换一种说法:如何强制Java使用两者? 问题答案: 要指定默认时区,您可以设置系统属性。您可以通过

  • 问题内容: 结果如下: 2011-09-24 14:10:51 -0400 2011年9月24日星期六20:10:51 为什么当我解析来自format()的日期时,它不遵守时区? 问题答案: 您正在打印调用的结果,该调用 始终 使用默认时区。基本上,除了调试之外,您不应该使用其他任何东西。 不要忘记,一个不 具有 时区-它代表着一个时刻,因为自Unix纪元(午夜1970年1月1日UTC)毫秒。 如

  • 问题内容: 我有解析日期的代码,如下所示: 一切正常,突然,这停止了。原来,管理员在服务器上进行了一些配置更改,并且当前返回的日期为“ 2010-12-27T10:50:44.000-08:00”,上述模式无法解析该日期。我有两个问题: 第一种是哪种模式将解析上述格式的JVM返回的日期(特别是时区为“ -08:00”)?其次,在Linux RHEL 5服务器上,究竟会在哪里更改此类设置,以便我们将

  • java.text.DateFormat类根据区域设置格式化日期。 由于不同的国家使用不同的格式来显示日期。 此类在处理应用程序内部化中的日期时非常有用。 下面的示例演示如何创建和使用DateFormat类。 IOTester.java import java.text.DateFormat; import java.util.Date; import java.util.Locale; publ

  • 我需要我的Java Android应用程序来提取和比较日期,但是要获得正确的日期一团糟。 实际运行时间:2022年1月10日周一22:29 结果: 日期当前时间=星期一 一月 10 22:29:53 GMT 01:00 2022 (正确日期) 日历.get(日历年)=2022.0.10 21:29:53 (错误的月份,错误的小时) 当前时间.getyear()=122.0.1 22:29:53 (

  • 而输出是 谁能详细说明一下1380605909318和61341428160000之间的区别?