将本地时间转换为UTC,反之亦然

时间:2016-05-23 11:43:57

标签: java android time

我正在研究Android应用程序,我想将本地时间(设备时间)转换为UTC并将其保存在数据库中。从数据库中检索后,我必须再次转换它并显示在设备的时区。任何人都可以建议如何用Java做到这一点?

8 个答案:

答案 0 :(得分:21)

我使用这两种方法将当地时间转换为GMT / UTC,反之亦然,这对我没有任何问题。

public static Date localToGMT() {
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    Date gmt = new Date(sdf.format(date));
    return gmt;
}

将要转换为设备本地时间的GMT / UTC日期传递给此方法:

public static Date gmttoLocalDate(Date date) {

    String timeZone = Calendar.getInstance().getTimeZone().getID();
    Date local = new Date(date.getTime() + TimeZone.getTimeZone(timeZone).getOffset(date.getTime()));
    return local
}

答案 1 :(得分:10)

接受答案的简化版和简明版:

public static Date dateFromUTC(Date date){
    return new Date(date.getTime() + Calendar.getInstance().getTimeZone().getOffset(date.getTime()));
}

public static Date dateToUTC(Date date){
    return new Date(date.getTime() - Calendar.getInstance().getTimeZone().getOffset(date.getTime()));
}

答案 2 :(得分:3)

试试这个:
 //将UTC转换为本地格式

 public Date getUTCToLocalDate(String date) {
            Date inputDate = new Date();
            if (date != null && !date.isEmpty()) {
                @SuppressLint("SimpleDateFormat") SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
                simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
                try {
                    inputDate = simpleDateFormat.parse(date);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }
            return inputDate;
        }  

//将本地日期转换为UTC

public String getLocalToUTCDate(Date date) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
    Date time = calendar.getTime();
    @SuppressLint("SimpleDateFormat") SimpleDateFormat outputFmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
    outputFmt.setTimeZone(TimeZone.getTimeZone("UTC"));
    return outputFmt.format(time);
}

答案 3 :(得分:2)

你可以尝试这样的东西插入DB:

    SimpleDateFormat f = new SimpleDateFormat("h:mm a E zz");
    f.setTimeZone(TimeZone.getTimeZone("UTC"));
    System.out.println(f.format(new Date()));
    String dd = f.format(new Date());

这可以从你的评论中选择:

<强>输出:

  

UTC UTC时间下午1:43

为此, - &gt;再次转换它并显示在设备的时间

<强>更新

String dd = f.format(new Date());

        Date date = null;
        DateFormat sdf = new SimpleDateFormat("h:mm a E zz");
        try {
            date = sdf.parse(dd);
        }catch (Exception e){

        }
        sdf.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
        System.out.println(sdf.format(date));

<强>输出:

  格林尼治标准时间周一晚上7:30 + 05:30

U可能会显示如下。

答案 4 :(得分:2)

java.time

现代方法使用 java.time ;几年前的类取代了可怕的日期时间类,例如adb tcpip 555adb connect 192.168.1.1:5555

按UTC捕获当前时刻。

Date

使用JDBC 4.2或更高版本的驱动程序投诉将其存储在数据库中。

Calendar

从数据库检索。

OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ;

调整为时区。

myPreparedStatement( … , odt ) ;

生成文本以呈现给用户。

OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;

对于版本26之前的早期Android,请使用 ThreeTenABP 库获取大多数 java.time 功能,该功能已向后移植到Java 6和Java 7中。 ThreeTen-Backport 项目。

答案 5 :(得分:1)

Time.getCurrentTimezone()

会为您提供时区和

Calendar c = Calendar.getInstance(); int seconds = c.get(Calendar.SECOND)

将以秒为单位获得UTC时间。当然,您可以更改该值以在另一个单元中获取它。

答案 6 :(得分:0)

获取当前UTC:

public String getCurrentUTC(){
        Date time = Calendar.getInstance().getTime();
        SimpleDateFormat outputFmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        outputFmt.setTimeZone(TimeZone.getTimeZone("UTC"));
        return outputFmt.format(time);
}

答案 7 :(得分:0)

尝试这个

byteCounter