我有两种日期格式,一种是字符串“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);
}
第一个输入似乎是从以UTC为单位的1970年第一时刻的历元基准开始的毫秒计数。
使用integer.parselong
将字符串解析为long
。
long count = Long.parseLong( "1416490009109" ) ;
Instant instant = Instant.ofEpochMilli( count ) ;
为了获得更大的灵活性,例如以各种格式生成文本,请转换为offsetdatetime
或zoneddatetime
。
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.date
、Calendar
、&SimpleDateFormat
。
要了解更多信息,请参阅Oracle教程。并搜索堆栈溢出以获得许多示例和解释。规范是JSR310。
问题内容: 当我运行此代码时: 我在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之间的区别?