จากการประทับเวลาถึงวันที่ Android

ขอให้เป็นวันที่ดี ฉันมีประทับเวลา 1481709600 และฉันต้องการให้มีรูปแบบเวลานี้ Wed, 14 Dec 2016

ฉันกำลังพยายามทำสิ่งนั้นโดยใช้:

private String getDateFromTimeStamp(Integer dt) {
            Date date = new Date (dt);
            return new SimpleDateFormat("EEE MMM dd hh:mm:ss yyyy ").format(date);
}

แต่เอาต์พุตปัจจุบันคือ Sun Jan 18 05:35:09 GMT+02:00 1970

ฉันคิดว่ารูปแบบวันที่ไม่ถูกต้อง ฉันต้องใช้รูปแบบใด

ขอบคุณ!

อัปเดต

ปัญหาคือวันและเดือนปีผิด น่าจะเป็น 14 ธ.ค. 2559 แทนที่จะเป็น 18 ม.ค. 2513


person VLeonovs    schedule 14.12.2016    source แหล่งที่มา


คำตอบ (7)


ปัญหาคือ timeStamp ของคุณเป็นวินาที ดังนั้นให้แปลง timeStamp ของคุณเป็นมิลลิวินาที จากนั้นใช้ฟังก์ชันรูปแบบวันที่ ...

ลองอันนี้ ...

ชวา

 private String getDate(long time) {
        Date date = new Date(time*1000L); // *1000 is to convert seconds to milliseconds
        SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy "); // the format of your date
        sdf.setTimeZone(TimeZone.getTimeZone("GMT-4"));
    
        return sdf.format(date);;
    }

คอตลิน

fun getDate(time:Long):String {
            var date:Date = Date(time*1000L); // *1000 is to convert seconds to milliseconds
            var sdf:SimpleDateFormat  = SimpleDateFormat("EEE, dd MMM yyyy "); // the format of your date
            sdf.setTimeZone(TimeZone.getTimeZone("GMT-4"));
    
        return sdf.format(date);
    }

ผลลัพธ์:- เช่นนี้ พุธ 14 ธันวาคม 2559

หมายเหตุ:- EEE จะแสดงเป็นวันในสัปดาห์ ,MMM จะแสดงเป็นเดือนในรูปแบบคำพูด และอื่นๆ ..

person sushildlh    schedule 14.12.2016

คุณจะผสมค่าใดก็ได้หากคุณอ่าน สิ่งนี้
คุณต้องการ ที่จะใช้ EEE, d MMM yyyy

อัปเดต

SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy");
sdf.format(new Date(1481709600));
person Salmaan    schedule 14.12.2016

รูปแบบวันที่ไม่ถูกต้อง คุณต้องใช้

 new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z").format(date);
person gauss    schedule 14.12.2016
comment
ใช้ long แทนจำนวนเต็ม - person gauss; 14.12.2016

ลองสิ่งนี้

private String getDateFromTimeStamp(long time) {
        Calendar cal = Calendar.getInstance(Locale.ENGLISH);
        cal.setTimeInMillis(time);
        String date = DateFormat.format("EEE MMM dd hh:mm:ss yyyy ", cal).toString();
        return date;
    }
person SaravInfern    schedule 14.12.2016
comment
@VLeonovs การประทับเวลาที่คุณผ่านไปคืออะไร ข้อผิดพลาดที่คุณทำคือ คุณได้ใช้ค่า Integer เป็นพารามิเตอร์ซึ่งควรเป็นประเภทข้อมูล long นั่นคือคุณโดยที่คุณได้รับปี 1970 เป็นปี ลองใช้โค้ดด้านบนและเปลี่ยนกลับหากคุณได้รับผลลัพธ์เดียวกัน - person SaravInfern; 14.12.2016

ลองวิธีนี้เพื่อรับข้อมูล ใส่เวลาใน setTimeInMillis ให้ยาวและไม่เท่ากับ int

private String getDate(long time) {
    Calendar cal = Calendar.getInstance(Locale.ENGLISH);
    cal.setTimeInMillis(time);
    String date = DateFormat.format("EEE MMM dd hh:mm:ss yyyy ", cal).toString();
    return date;
}
person Deepak Sachdeva    schedule 14.12.2016
comment
@VLeonovs 1481709600*1,000 จากนั้นจะให้วันที่ที่ถูกต้องแก่คุณ ฉันได้กล่าวถึงคุณแล้ว setTimeInMillis - person Deepak Sachdeva; 14.12.2016

คุณสามารถสร้างวิธีการง่ายๆ เพื่อรับวันที่จากการประทับเวลาได้ดังนี้

public String getDateCurrentTimeZone(long timestamp) {
        try {
            Calendar calendar = Calendar.getInstance();
            TimeZone tz = TimeZone.getDefault();    calendar.setTimeInMillis(timestamp * 1000);
calendar.add(Calendar.MILLISECOND,
tz.getOffset(calendar.getTimeInMillis()));
            SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy");
Date currenTimeZone = (Date) calendar.getTime();
return sdf.format(currenTimeZone);
} catch (Exception e) {
}
return "";
}
person Naitik    schedule 14.12.2016

สิ่งนี้ใช้ได้กับฉัน:

val currentDay = Date()
    val day = currentDay.time
    Logger.i("currentDay = $currentDay and day : $day ")

    val c = Calendar.getInstance()
    c.timeInMillis = day
    val d = c.time
    val sdf = SimpleDateFormat("dd/MM/yyyy HH:mm")

    Logger.i("meDate : ${sdf.format(d)}")
person Gama_aide    schedule 19.11.2017