首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP日期格式符号与JAVA日期格式符号

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

Stack Overflow用户
提问于 2014-03-17 09:14:12
回答 2查看 714关注 0票数 0

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

代码语言:javascript
复制
17.03.2014 09:50

在PHP中,我必须使用日期格式模式

代码语言:javascript
复制
d.m.Y H:i

在Java中,我使用这种模式

代码语言:javascript
复制
dd.mm.yyyy hh:mm

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-17 10:36:30

对不起,没有Java类执行此转换。你必须根据你的需要从头开始写你自己的书。

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

补充编辑:

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

票数 0
EN

Stack Overflow用户

发布于 2014-12-09 19:46:31

这是我写的,它依赖于JodaTime库。我还没有对每一个案例做过深入的测试,所以要确保它对你有用。

代码语言:javascript
复制
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();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22450407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档