Tôi có mili giây. Tôi cần nó được chuyển đổi sang định dạng ngày của
thí dụ:
23/10/2011
Làm thế nào để đạt được nó?
Tôi có mili giây. Tôi cần nó được chuyển đổi sang định dạng ngày của
thí dụ:
23/10/2011
Làm thế nào để đạt được nó?
Câu trả lời:
Chỉ cần thử mã mẫu này: -
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Test {
/**
* Main Method
*/
public static void main(String[] args) {
System.out.println(getDate(82233213123L, "dd/MM/yyyy hh:mm:ss.SSS"));
}
/**
* Return date in specified format.
* @param milliSeconds Date in milliseconds
* @param dateFormat Date format
* @return String representing date in specified format
*/
public static String getDate(long milliSeconds, String dateFormat)
{
// Create a DateFormatter object for displaying date in specified format.
SimpleDateFormat formatter = new SimpleDateFormat(dateFormat);
// Create a calendar object that will convert the date and time value in milliseconds to date.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(milliSeconds);
return formatter.format(calendar.getTime());
}
}
Tôi hy vọng điều này sẽ giúp ...
java.util.Date
, java.util.Calendar
và java.text.SimpleDateFormat
bây giờ là di sản, thay thế bởi sự java.time lớp. Phần lớn chức năng java.time được chuyển ngược sang Java 6 & Java 7 trong dự án ThreeTen-Backport . Được điều chỉnh thêm cho Android trước đó trong dự án ThreeTenABP . Xem Cách sử dụng ThreeTenABP… .
Chuyển đổi giá trị mili giây thành Date
ví dụ và chuyển nó đến trình định dạng đã chọn.
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String dateString = formatter.format(new Date(dateInMillis)));
public static String convertDate(String dateInMilliseconds,String dateFormat) {
return DateFormat.format(dateFormat, Long.parseLong(dateInMilliseconds)).toString();
}
Gọi hàm này
convertDate("82233213123","dd/MM/yyyy hh:mm:ss");
hãy thử mã này có thể hữu ích, sửa đổi nó phù hợp với nhu cầu của bạn
SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
Date d = format.parse(fileDate);
cuối cùng tôi cũng tìm thấy mã bình thường phù hợp với tôi
Long longDate = Long.valueOf(date);
Calendar cal = Calendar.getInstance();
int offset = cal.getTimeZone().getOffset(cal.getTimeInMillis());
Date da = new Date();
da = new Date(longDate-(long)offset);
cal.setTime(da);
String time =cal.getTime().toLocaleString();
//this is full string
time = DateFormat.getTimeInstance(DateFormat.MEDIUM).format(da);
//this is only time
time = DateFormat.getDateInstance(DateFormat.MEDIUM).format(da);
//this is only date
Instant.ofEpochMilli( myMillisSinceEpoch ) // Convert count-of-milliseconds-since-epoch into a date-time in UTC (`Instant`).
.atZone( ZoneId.of( "Africa/Tunis" ) ) // Adjust into the wall-clock time used by the people of a particular region (a time zone). Produces a `ZonedDateTime` object.
.toLocalDate() // Extract the date-only value (a `LocalDate` object) from the `ZonedDateTime` object, without time-of-day and without time zone.
.format( // Generate a string to textually represent the date value.
DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) // Specify a formatting pattern. Tip: Consider using `DateTimeFormatter.ofLocalized…` instead to soft-code the formatting pattern.
) // Returns a `String` object.
Cách tiếp cận hiện đại sử dụng các lớp java.time thay thế các lớp ngày-giờ kế thừa cũ rắc rối được sử dụng bởi tất cả các Câu trả lời khác.
Giả sử bạn có một long
số mili giây kể từ tham chiếu kỷ nguyên của thời điểm đầu tiên của năm 1970 theo giờ UTC, 1970-01-01T00: 00: 00Z…
Instant instant = Instant.ofEpochMilli( myMillisSinceEpoch ) ;
Để có được một ngày yêu cầu một múi giờ. Đối với bất kỳ thời điểm nhất định nào, ngày thay đổi trên toàn cầu theo khu vực.
ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
ZonedDateTime zdt = instant.atZone( z ) ; // Same moment, different wall-clock time.
Trích xuất một giá trị chỉ ngày.
LocalDate ld = zdt.toLocalDate() ;
Tạo Chuỗi đại diện cho giá trị đó bằng định dạng ISO 8601 tiêu chuẩn.
String output = ld.toString() ;
Tạo một chuỗi ở định dạng tùy chỉnh.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
String output = ld.format( f ) ;
Mẹo: Hãy cân nhắc để java.time tự động bản địa hóa cho bạn thay vì viết mã cứng một mẫu định dạng. Sử dụng các DateTimeFormatter.ofLocalized…
phương pháp.
Các java.time khung được xây dựng vào Java 8 và sau đó. Những lớp học thay thế cái cũ phiền hà di sản lớp học ngày thời gian như java.util.Date
, Calendar
, & SimpleDateFormat
.
Các Joda thời gian dự án, bây giờ trong chế độ bảo trì , khuyên chuyển đổi sang các java.time lớp.
Để tìm hiểu thêm, hãy xem Hướng dẫn Oracle . Và tìm kiếm Stack Overflow để có nhiều ví dụ và giải thích. Đặc điểm kỹ thuật là JSR 310 .
Bạn có thể trao đổi các đối tượng java.time trực tiếp với cơ sở dữ liệu của mình. Sử dụng trình điều khiển JDBC tương thích với JDBC 4.2 trở lên. Không cần chuỗi, không cần java.sql.*
lớp.
Lấy các lớp java.time ở đâu?
Các ThreeTen-Extra dự án mở rộng java.time với các lớp bổ sung. Dự án này là cơ sở chứng minh cho những bổ sung có thể có trong tương lai cho java.time. Bạn có thể tìm thấy một số các lớp học hữu ích ở đây chẳng hạn như Interval
, YearWeek
, YearQuarter
, và nhiều hơn nữa .
public class LogicconvertmillistotimeActivity extends Activity {
/** Called when the activity is first created. */
EditText millisedit;
Button millisbutton;
TextView millistextview;
long millislong;
String millisstring;
int millisec=0,sec=0,min=0,hour=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
millisedit=(EditText)findViewById(R.id.editText1);
millisbutton=(Button)findViewById(R.id.button1);
millistextview=(TextView)findViewById(R.id.textView1);
millisbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
millisbutton.setClickable(false);
millisec=0;
sec=0;
min=0;
hour=0;
millisstring=millisedit.getText().toString().trim();
millislong= Long.parseLong(millisstring);
Calendar cal = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
if(millislong>1000){
sec=(int) (millislong/1000);
millisec=(int)millislong%1000;
if(sec>=60){
min=sec/60;
sec=sec%60;
}
if(min>=60){
hour=min/60;
min=min%60;
}
}
else
{
millisec=(int)millislong;
}
cal.clear();
cal.set(Calendar.HOUR_OF_DAY,hour);
cal.set(Calendar.MINUTE,min);
cal.set(Calendar.SECOND, sec);
cal.set(Calendar.MILLISECOND,millisec);
String DateFormat = formatter.format(cal.getTime());
// DateFormat = "";
millistextview.setText(DateFormat);
}
});
}
}
public static Date getDateFromString(String date) {
Date dt = null;
if (date != null) {
for (String sdf : supportedDateFormats) {
try {
dt = new Date(new SimpleDateFormat(sdf).parse(date).getTime());
break;
} catch (ParseException pe) {
pe.printStackTrace();
}
}
}
return dt;
}
public static Calendar getCalenderFromDate(Date date){
Calendar cal =Calendar.getInstance();
cal.setTime(date);return cal;
}
public static Calendar getCalenderFromString(String s_date){
Date date = getDateFromString(s_date);
Calendar cal = getCalenderFromDate(date);
return cal;
}
public static long getMiliSecondsFromString(String s_date){
Date date = getDateFromString(s_date);
Calendar cal = getCalenderFromDate(date);
return cal.getTimeInMillis();
}
Tôi đã tìm kiếm một cách hiệu quả để làm điều này trong một thời gian khá dài và cách tốt nhất mà tôi tìm thấy là:
DateFormat.getDateInstance(DateFormat.SHORT).format(new Date(millis));
Ưu điểm:
Nhược điểm:
Bạn có thể cache đối tượng java.text.DateFormat, nhưng nó không phải là threadsafe. Điều này là OK nếu bạn đang sử dụng nó trên chuỗi giao diện người dùng.
public static String toDateStr(long milliseconds, String format)
{
Date date = new Date(milliseconds);
SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.US);
return formatter.format(date);
}
Sử dụng SimpleDateFormat cho Android N trở lên. Sử dụng lịch cho các phiên bản cũ hơn, ví dụ:
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
fileName = new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss").format(new Date());
Log.i("fileName before",fileName);
}else{
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH,1);
String zamanl =""+cal.get(Calendar.YEAR)+"-"+cal.get(Calendar.MONTH)+"-"+cal.get(Calendar.DAY_OF_MONTH)+"-"+cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE)+":"+cal.get(Calendar.SECOND);
fileName= zamanl;
Log.i("fileName after",fileName);
}
Đầu ra:
fileName trước: 2019-04-12-07: 14: 47 // sử dụng
tệp SimpleDateFormat Tên sau: 2019-4-12-7: 13: 12 // sử dụng Calender
Đây là cách dễ nhất khi sử dụng Kotlin
private const val DATE_FORMAT = "dd/MM/yy hh:mm"
fun millisToDate(millis: Long) : String {
return SimpleDateFormat(DATE_FORMAT, Locale.US).format(Date(millis))
}
SimpleDateFormat
lớp học đã lỗi thời và khét tiếng phiền phức . Ít nhất không phải là tùy chọn đầu tiên. Và không phải không có bất kỳ đặt trước. Ngày nay, chúng ta có rất nhiều thứ tốt hơn java.time
, API ngày giờ hiện đại của Java và nó DateTimeFormatter
. Có, bạn có thể sử dụng nó trên Android. Đối với Android cũ hơn, hãy sử dụng tính năng gỡ bỏ hoặc xem Cách sử dụng ThreeTenABP trong Android Project .
hh
? Vui lòng kiểm tra sự khác biệt giữa chữ hoa và chữ thường tại đây.
return Instant.ofEpochMilli(millis).atZone(ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern(DATE_FORMAT, Locale.US))
. Có, nó dài hơn vì nó cung cấp thêm thông tin về những gì đang diễn ra, vì vậy đó là một lợi thế.