如何从java中的长值中获取12小时格式的时间

如何从java中的长值中获取12小时格式的时间,java,string,long-integer,Java,String,Long Integer,我有一个长值,其值如下所示 e、 g 我需要一个智能的方式来转换上述类型的值,并获得时间为10:00AM和01:37PM的字符串格式 有人能告诉我怎么做吗?代码- Long timeInLong = 1000l; SimpleDateFormat dateFormat = new SimpleDateFormat("HHmm"); Date date = dateFormat.parse(Long.toString(timeInLong)); System.out.println(new Sim

我有一个长值,其值如下所示

e、 g

我需要一个智能的方式来转换上述类型的值,并获得时间为10:00AM和01:37PM的字符串格式

有人能告诉我怎么做吗?

代码-

Long timeInLong = 1000l;
SimpleDateFormat dateFormat = new SimpleDateFormat("HHmm");
Date date = dateFormat.parse(Long.toString(timeInLong));
System.out.println(new SimpleDateFormat("hh:mm a").format(date));
结果-

上午10:00


这太容易了,但是:

int hours = timeInLong / 100;
int minutes = timeInLong % 100;
boolean isPM = false;

if (hours > 12) {
   isPM = true
} 

if (hours > 13) {
   hours -= 12;
}
String result = String.format("%02d:%02d %s", hours, minutes, (isPM ? "PM" : "AM"));
我错过什么了吗?

试试:

SimpleDateFormat readerFormat = "HHmm";
SimpleDateFormat writerFormat = "hh:mma";

Date date = readerFormat.parse(Long.toString(timeInLong));
String toPrint = writerFormat.format(date);

我会这样做:

SimpleDateFormat formatA = new SimpleDateFormat("hhmm");
SimpleDateFormat formatB = new SimpleDateFormat("hh:mm a");
Date intermediate = formatA.parse(String.valueOf(1337));
String result = formatB.format(intermediate);

如果要避免SimpleDataFormat导入,请选择高效的oneliner:

String toTimeString(long time) {
    return ((time < 1300) ? time / 100 : time / 100 - 12)
         + ":" + time % 100
         + ((time < 1200) ? " AM" : " PM");
}

好的,这看起来比我的解决方案好一些:第二个格式字符串应该是hh:mm a,而不是hh:mm a-注意hh是12小时时钟,hh是24小时时钟。long值代表什么?前两位是小时,后两位是分钟?那你怎么代表上午7:45?为什么要用long呢?但是如果你像这样表示时间,那么所有>1200的都是下午,剩下的是上午100给你几分钟;/100小时给你时间。对于PM时间,在计算小时和分钟之前扣除1200
String toTimeString(long time) {
    return ((time < 1300) ? time / 100 : time / 100 - 12)
         + ":" + time % 100
         + ((time < 1200) ? " AM" : " PM");
}
    int timeInLong = 1337;
    Calendar c = Calendar.getInstance();
    c.set(Calendar.MINUTE, timeInLong % 100);
    c.set(Calendar.HOUR_OF_DAY, timeInLong / 100);
    System.out.println(new SimpleDateFormat("HH:mm a", Locale.US).format(c.getTime()));