Java 时间戳转换器

Java 时间戳转换器,java,timestamp,Java,Timestamp,我试图用java创建一个时间戳到日期和日期到时间戳转换器。转换器逻辑工作正常,我将其显示在控制台窗口上。但这并不正确 如果我在控制台窗口中键入此时间戳: 1449946800000 (I get this timestamp from my calendar web plugin) Date : 13.10.2016 20:00:00 (Timezone "Europe/Berlin ) = 1476381600000 第一次我调用一个方法,它需要像上面那样的时间戳格式 Lo

我试图用java创建一个时间戳到日期和日期到时间戳转换器。转换器逻辑工作正常,我将其显示在控制台窗口上。但这并不正确

如果我在控制台窗口中键入此时间戳:

1449946800000 (I get this timestamp from my calendar web plugin)  

Date : 13.10.2016 20:00:00 (Timezone "Europe/Berlin ) = 1476381600000
第一次我调用一个方法,它需要像上面那样的时间戳格式

      LongStamp = LongStamp/1000;   

        logic.convertedTime(LongStamp);

        } else {
          .....

        }
如果匹配,则调用方法logic.convertedTime(xx)。(参见类转换逻辑)

这是我的密码:

public class convertLogic {

/** TimeZone-Support**/ 
private static final String TIMEZONEBERLIN = "Europe/Berlin";


/**
 * convertedTime:  <br>
 * input timestamp to convert into date <br>
 * <strong>...</strong>
 * @param timestamp 
 */
public void convertedTime(long timestamp) {

    TimeZone timeZoneBerlin = TimeZone.getTimeZone(TIMEZONEBERLIN);
    // System.out.println(timeZoneBerlin.getDisplayName());
    // System.out.println(timeZoneBerlin.getID());
    // System.out.println(timeZoneBerlin.getOffset(System.currentTimeMillis()));

    Calendar myDate = GregorianCalendar.getInstance();
    myDate.setTimeZone(timeZoneBerlin);
    myDate.setTimeInMillis(timestamp * 1000);

    int month = myDate.get(Calendar.MONTH) + 1;
    int second = Integer.parseInt(leadingZero(myDate.get(Calendar.SECOND)));


    System.out.println("Datum: " + myDate.get(Calendar.DAY_OF_MONTH) + "." + month + "." + myDate.get(Calendar.YEAR)
            + " " + myDate.get(Calendar.HOUR_OF_DAY) + ":" + myDate.get(Calendar.MINUTE) + ":"
            + second);

}



 /**
 * leadingZero for 2 digit values
 * 
 * @param value
 * @return String
 */
private static String leadingZero(int value) {

    int testValue = value;

    if (testValue < 10) {

        return "0" + value;
    } else {

        return value + "";
    }

}
但是我想要或者我需要像这样的小时,分钟和秒的所有零:

  13.10.2016 20:00:00 
有人知道解决办法吗

提前谢谢

修复方法:调用您的
leadingZero
方法 添加前导零后,可以有效地将其删除

用前导零填充后,调用
Integer.parseInt
。该调用生成一个数字,即
int
。将其转换为字符串时使用的默认格式没有前导零

second
的数据类型更改为
String

同样,将
myDate.get(Calendar.HOUR\u of\u DAY)
的结果传递给您的
leadingZero
方法

奇怪的结果 我不明白你的意见和结果。如果
1449946800000
是从1970 UTC的第一个时刻算起的毫秒数,则这是2015年而不是2016年的日期时间:

  • 2015-12-12T19:00:00Z
  • 2015-12-12T20:00+01:00[欧洲/柏林]
java.time 你工作太辛苦了。为此工作使用日期-时间框架

该框架内置于Java8及更高版本中。这些类取代了旧的麻烦的日期时间类,如
java.util.date
.Calendar
,&
java.text.SimpleDateFormat

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释

大部分java.time功能都在中向后移植到Java6和Java7,并在中进一步适应Android

示例代码 首先将历元中的计数转换为表示时间线上某一时刻的对象,分辨率高达

应用时区。A代表时区。我们用它来生成一个对象

创建一个字符串来表示对象的值

无需定义格式化模式。
DateTimeFormatter
类可以自动将日期时间表示形式本地化为用户定义的人类语言和文化规范。您所需的格式已知为德国常用的中等长度格式

理解a和a
区域设置
是不同的和独立的。人们将日期时间的含义调整为全球某个地理区域的挂钟时间。另一种方法翻译日期或月份的名称,并确定逗号与句号,以及其他类似的问题

Locale locale = Locale.GERMANY;
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.MEDIUM ).withLocale ( locale );
String output = zdt.format ( formatter );
转储到控制台

System.out.println ( "input: " + input + " | instant: " + instant + " | zdt: " + zdt + " | output: " + output );
输入:1449946800000 |即时:2015-12-12T19:00:00Z | zdt:2015-12-12T20:00+01:00[欧洲/柏林]|输出:12.12.2015 20:00:00


DateFormat
可能是简化代码的好方法(或者在Java 8中是
DateTimeFormatter

为什么不调用方法
leadingZero
?你有没有试过使用你所用的方法?
ZoneId zoneId = ZoneId.of ( "Europe/Berlin" );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
Locale locale = Locale.GERMANY;
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.MEDIUM ).withLocale ( locale );
String output = zdt.format ( formatter );
System.out.println ( "input: " + input + " | instant: " + instant + " | zdt: " + zdt + " | output: " + output );