Ниже блок кода не является точным решением, но он определенно поможет вам.
DECLARE @Dt datetime
SELECT @Dt='02-21-2008'
SELECT DATEPART( wk, @Dt)
+1 для этого ответа
Дополнительно я предложил бы следующую реализацию с помощью полиморфизма:
Таким образом, можно добавить новую платформу, легче путем сокращения связывающийся среди классов.
Клиентский код:
Desktop desktop = Desktop.getDesktop();
desktop.open( aFile );
desktop.imaginaryAction( aFile );
Рабочий стол impl:
package your.pack.name;
import java.io.File;
public class Desktop{
// hide the constructor.
Desktop(){}
// Created the appropriate instance
public static Desktop getDesktop(){
String os = System.getProperty("os.name").toLowerCase();
Desktop desktop = new Desktop();
// This uf/elseif/else code is used only once: here
if ( os.indexOf("windows") != -1 || os.indexOf("nt") != -1){
desktop = new WindowsDesktop();
} else if ( os.equals("windows 95") || os.equals("windows 98") ){
desktop = new Windows9xDesktop();
} else if ( os.indexOf("mac") != -1 ) {
desktop = new OSXDesktop();
} else if ( os.indexOf("linux") != -1 && isGnome() ) {
desktop = new GnomeDesktop();
} else if ( os.indexOf("linux") != -1 && isKde() ) {
desktop = new KdeDesktop();
} else {
throw new UnsupportedOperationException(String.format("The platform %s is not supported ",os) );
}
return desktop;
}
// default implementation :(
public void open( File file ){
throw new UnsupportedOperationException();
}
// default implementation :(
public void imaginaryAction( File file ){
throw new UnsupportedOperationException();
}
}
// One subclass per platform below:
// Each one knows how to handle its own platform
class GnomeDesktop extends Desktop{
public void open( File file ){
// Runtime.getRuntime().exec: execute gnome-open <file>
}
public void imaginaryAction( File file ){
// Runtime.getRuntime().exec:gnome-something-else <file>
}
}
class KdeDesktop extends Desktop{
public void open( File file ){
// Runtime.getRuntime().exec: kfmclient exec <file>
}
public void imaginaryAction( File file ){
// Runtime.getRuntime().exec: kfm-imaginary.sh <file>
}
}
class OSXDesktop extends Desktop{
public void open( File file ){
// Runtime.getRuntime().exec: open <file>
}
public void imaginaryAction( File file ){
// Runtime.getRuntime().exec: wow!! <file>
}
}
class WindowsDesktop extends Desktop{
public void open( File file ){
// Runtime.getRuntime().exec: cmd /c start <file>
}
public void imaginaryAction( File file ){
// Runtime.getRuntime().exec: ipconfig /relese /c/d/e
}
}
class Windows9xDesktop extends Desktop{
public void open( File file ){
//Runtime.getRuntime().exec: command.com /C start <file>
}
public void imaginaryAction( File file){
//Runtime.getRuntime().exec: command.com /C otherCommandHere <file>
}
}
Это - только пример, в реальной жизни не стоит для создания нового класса только для параметризации значения (командная строка %s), Но позвольте нам, действительно предполагают, что каждый метод работает, другой ступает в особенный метод платформы.
При выполнении этого вида подхода, может удалить ненужные конструкции if/elseif/else, которые со временем могут представить ошибки (если существует 6 из них в коде, и изменение является neede, можно забыть обновлять одного из них, или копией/вставкой можно забыть изменять команду для выполнения),
public static boolean isWindows() {
String os = System.getProperty("os.name").toLowerCase();
return os.indexOf("windows") != -1 || os.indexOf("nt") != -1;
}
public static boolean isMac() {
String os = System.getProperty("os.name").toLowerCase();
return os.indexOf("mac") != -1;
}
public static boolean isLinux() {
String os = System.getProperty("os.name").toLowerCase();
return os.indexOf("linux") != -1;
}
public static boolean isWindows9X() {
String os = System.getProperty("os.name").toLowerCase();
return os.equals("windows 95") || os.equals("windows 98");
}
и
if (isLinux())
{
cmds.add(String.format("gnome-open %s", fileName));
String subCmd = (exec) ? "exec" : "openURL";
cmds.add(String.format("kfmclient "+subCmd+" %s", fileName));
}
else if (isMac())
{
cmds.add(String.format("open %s", fileName));
}
else if (isWindows() && isWindows9X())
{
cmds.add(String.format("command.com /C start %s", fileName));
}
else if (isWindows())
{
cmds.add(String.format("cmd /c start %s", fileName));
}
Так же, как дополнение: Вместо gnome-open
, использовать xdg-open
. Это - часть XdgUtils, которые являются в свою очередь частью пакета Поддержки настольных систем LSB (запускающийся с 3,2).
Банка (необходимо) все еще использовать gnome-open
как нейтрализация, но xdg-open
будет также работать над рабочими столами неGNOME.
JDIC является библиотекой, которая обеспечивает подобную Рабочему столу функциональность в Java 1.5.
SWT дает Вам возможность lokk для стандартной программы для открытия файла через:
final Program p = Program.findProgram(fileExtension);
p.execute(file.getAbsolutePath());
Строго это не является Межплатформенным, так как SWT является зависимым платформы, но для каждой платформы можно использовать diffenrent SWT банка.
Можно использовать значение по умолчанию ОС способ открыть его для Вас.
Мы действительно помещаем команду снаружи где-нибудь в конфигурационном файле.
Ваш "JAR и исходный код" будут "межплатформенными", но Ваше развертывание не делает.
Можно также сделать что-то вроде этого ответ. Можно поместить имя класса класса фабрики реализации "Deskop" в файл настройки. (может быть руководство или пружина, если Вам нравится),