PHP日期格式符号与JAVA日期格式符号

PHP日期格式符号与JAVA日期格式符号,java,php,date,Java,Php,Date,PHP似乎使用了Java以外的其他日期格式符号来根据模式格式化日期。 例如,当我想输出这样的日期时: 17.03.2014 09:50 在PHP中,我必须使用日期格式模式 d.m.Y H:i 在Java中,我使用模式 dd.mm.yyyy hh:mm 是否有Java类可以将给定的输入(Java)模式转换为PHP模式,例如将dd.mm.yyyy hh:mm转换为d.m.Y H:i?我这样问是因为我必须使用Javascript,它使用PHP日期格式符号来格式化日期。对不起,没有Java类可以进

PHP似乎使用了Java以外的其他日期格式符号来根据模式格式化日期。 例如,当我想输出这样的日期时:

17.03.2014 09:50
在PHP中,我必须使用日期格式模式

d.m.Y H:i
在Java中,我使用模式

dd.mm.yyyy hh:mm

是否有Java类可以将给定的输入(Java)模式转换为PHP模式,例如将
dd.mm.yyyy hh:mm
转换为
d.m.Y H:i
?我这样问是因为我必须使用Javascript,它使用PHP日期格式符号来格式化日期。

对不起,没有Java类可以进行这种转换。你必须根据自己的需要从头开始写自己的

注意:每种编程语言都使用自己的模式方言。甚至Java自版本8以来也有两种不同的模式样式,但它们之间没有转换

补充编辑:


您还应该记住,由于底层不同格式和解析引擎的限制,转换并不总是可能的。此外,有时可以中断并引入新的模式方言,请参阅JSR-310的设计决策,以获得更类似CLDR、更强大的Java模式方言。

这是我写的一个,它依赖于JodaTime库。我没有对每个案例都做过深入的测试,所以请确保它对您有效

import org.joda.time.DateTime;

import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class DateUtils {
    private static final String[] daysOfWeek = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
    private static final String[] daysOfWeekShort = {"Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"};
    private static final String[] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
    private static final String[] monthsShort = {"Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"};
    private static final String[] daysInMonth = {"31", "28", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31"};
    private static final String[] suffixes = {"st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th",
                                              "th", "th", "th", "th", "th", "th", "th", "th", "th", "th",
                                              "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th",
                                              "th", "th"};

    /*
        Works like PHP Date function, has support for most characters.  Time zone offsets mainly what is missing.
     */
    public static String format(DateTime dt, String format){
        int pos = 0;
        char[] charArray = format.toCharArray();
        int length = charArray.length;
        StringBuilder sb = new StringBuilder();
        while (pos < length){
            switch(charArray[pos]){
            // Days
                case 'd':
                    sb.append(dt.getDayOfMonth() < 10 ? "0" + dt.getDayOfMonth() : dt.getDayOfMonth());
                    break;
                case 'D':
                    sb.append(daysOfWeekShort[dt.getDayOfWeek()]);
                    break;
                case 'l':
                    sb.append(daysOfWeek[dt.getDayOfWeek()]);
                    break;
                case 'j':
                    sb.append(dt.getDayOfMonth());
                    break;
                case 'N':
                    sb.append(dt.getDayOfWeek() + 1);
                    break;
                case 'S':
                    sb.append(suffixes[dt.getDayOfMonth() - 1]);
                case 'w':
                    sb.append(dt.getDayOfWeek());
                    break;
                case 'z':
                    sb.append(dt.getDayOfYear());
                    break;

            // Weeks
                case 'W':
                    sb.append(dt.getWeekOfWeekyear()); // Needs confirmation
                    break;
            // Months
                case 'F':
                    sb.append(months[dt.getMonthOfYear() - 1]);
                    break;
                case 'M':
                    sb.append(monthsShort[dt.getMonthOfYear() - 1]);
                    break;
                case 'm':
                    sb.append(dt.getMonthOfYear() < 10 ? "0" + dt.getMonthOfYear() : dt.getMonthOfYear());
                    break;
                case 'n':
                    sb.append(dt.getMonthOfYear());
                    break;
                case 't':
                    int moy = dt.getMonthOfYear();
                    if (moy == 2 && dt.getYear() % 4 == 0) { sb.append("29"); }
                    else { sb.append(daysInMonth[moy]); }
                    break;
            // Years
                case 'Y':
                    sb.append(dt.getYear());
                    break;
                case 'y':
                    sb.append(dt.getYearOfCentury());
                    break;
                case 'L':
                    sb.append(dt.getYearOfCentury() % 4 == 0 ? 1 : 0);
                    break;
            // AM/PM
                case 'a':
                    sb.append(dt.getHourOfDay() < 13 ? "am" : "pm");
                    break;
                case 'A':
                    sb.append(dt.getHourOfDay() < 13 ? "AM" : "PM");
                    break;
            // Hours
                case 'g':
                    sb.append(dt.getHourOfDay() % 12);
                    break;
                case 'G':
                    sb.append(dt.getHourOfDay());
                    break;
                case 'h':
                    sb.append(dt.getHourOfDay() < 10 ? "0" + dt.getHourOfDay() % 12 : dt.getHourOfDay() % 12);
                    break;
                case 'H':
                    sb.append(dt.getHourOfDay() < 10 ? "0" + dt.getHourOfDay() : dt.getHourOfDay());
                    break;
            // Minute
                case 'i':
                    sb.append(dt.getMinuteOfHour() < 10 ? "0" + dt.getMinuteOfHour() : dt.getMinuteOfHour());
                    break;
            // Second
                case 's':
                    sb.append(dt.getSecondOfMinute());
                    break;
            // Timezone
                case 'e':
                    sb.append(dt.getZone());
                    break;
            // Any other character
                default:
                    sb.append(charArray[pos]);
            }
            pos++;
        }
        return sb.toString();
    }
}
import org.joda.time.DateTime;
导入java.util.Calendar;
导入java.util.Date;
导入java.util.Locale;
导入java.util.TimeZone;
公共类DateUtils{
私有静态最终字符串[]daysOfWeek={“星期日”、“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”};
私有静态最终字符串[]daysOfWeekShort={“Sun”、“Mon”、“Tues”、“Wed”、“Thur”、“Fri”、“Sat”};
私有静态最终字符串[]月={“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”};
私有静态最终字符串[]monthshort={“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”};
私有静态最终字符串[]daysInMonth={“31”、“28”、“31”、“30”、“31”、“30”、“31”、“30”、“31”、“30”、“31”、“30”、“30”、“30”、“31”};
私有静态最终字符串[]后缀={“st”、“nd”、“rd”、“th”、“th”、“th”、“th”、“th”、“th”、“th”、“th”,
“th”、“th”、“th”、“th”、“th”、“th”、“th”、“th”、“th”、“th”、“th”、“th”、“th”,
“st”、“nd”、“rd”、“th”、“th”、“th”、“th”、“th”、“th”、“th”、“th”、“th”,
“th”,“th”};
/*
与PHP日期函数类似,支持大多数字符。时区主要补偿缺少的字符。
*/
公共静态字符串格式(DateTime dt,字符串格式){
int pos=0;
char[]charArray=format.toCharArray();
int length=charArray.length;
StringBuilder sb=新的StringBuilder();
while(pos