JetBrains IDEs

Stella981
• 阅读 708
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.math.BigInteger;
import java.util.Random;
import java.util.zip.CRC32;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

/**
 * Created by rover12421 on 4/6/15.
 */
public class Main {
    public enum Product {
        RubyMine(1, "RubyMine", GenericKeyMaker.PRODUCTID_RubyMine, "BB62FBB57F105CD61B47AE2290FCB3CE1179942DE171BEDDF6BAA1A521B9368B735C7C931902EBA8DE6D160711A6ECC40F4A5E766E9FCDEE8A38715DB572AD3D", "7BFADCB153F59E86E69BC1820B4DB72573786E6B00CB824E57AD59BFE915231972746F47C6FBE0D8D88809DA313C1E4BEAD305AD8AFD31AE116ABCB181FF4F21", true),
        PyCharm(2, "PyCharm", GenericKeyMaker.PRODUCTID_PyCharm, "D57B0596A03949D9A3BB0CD1F7931E405AE27D0E0AF4E562072B487B0DAB7F0874AA982E5383E75FF13D36CA9D8531AC1FA2ED7B11C8858E821C2D5FB48002DD", "406047D02363033D295DB7C0FD8A94DDCD4A6D71B5A622220C8D65DF0DC1409E0BDE26AF66B0AD717406C22FC8BEC3ED88C1B7091BA3443B6BFBA26120DE6A15", true),
        WebStorm(3, "WebStorm", GenericKeyMaker.PRODUCTID_WebStorm, "BB62FBB57F105CD61B47AE2290FCB3CE1179942DE171BEDDF6BAA1A521B9368B735C7C931902EBA8DE6D160711A6ECC40F4A5E766E9FCDEE8A38715DB572AD3D", "7BFADCB153F59E86E69BC1820B4DB72573786E6B00CB824E57AD59BFE915231972746F47C6FBE0D8D88809DA313C1E4BEAD305AD8AFD31AE116ABCB181FF4F21", true),
        PhpStorm(4, "PhpStorm", GenericKeyMaker.PRODUCTID_PhpStorm, "BB62FBB57F105CD61B47AE2290FCB3CE1179942DE171BEDDF6BAA1A521B9368B735C7C931902EBA8DE6D160711A6ECC40F4A5E766E9FCDEE8A38715DB572AD3D", "7BFADCB153F59E86E69BC1820B4DB72573786E6B00CB824E57AD59BFE915231972746F47C6FBE0D8D88809DA313C1E4BEAD305AD8AFD31AE116ABCB181FF4F21", true),
        AppCode(5, "AppCode", GenericKeyMaker.PRODUCTID_AppCode, "F0DD6995C4BD3223641C79C8608D74F32ED54A8BDAE468EB5AC53F1F1C8925E263F82317356BC73B1C82B520630250212416C99CB39A8B7C2611E35552E166B9", "81B5EAEF61A4B584839C26253781D63243CD4F38E3A74FAD3713B3FB7025978538F10E743456F24BB20D5792BFDCB76DB6162C3D5C77DB7B29906CBFC9114EA5", true),
        Clion(6, "Clion", GenericKeyMaker.PRODUCTID_CLION, "C4AD4C091E08E5688B81B837506EB84D103FB3B2165F62E61C74B345D28C4A0CD0BE2FADF485883D0DDD4E24AAB758716027E84D420DE525B042A70FF8174031", "6FAADD5307E4912C4C993858DFA81DA853A3778993BE50CECA35505C427138D112D75AA22924E9317270C88B164C31C17C5A43B359F21DABFE923A7482DD7401", true),
        Idea(7, "Idea", GenericKeyMaker.PRODUCTID_IDEA, "430D187DE8BB3F18FB0A986E6B7163BD", "86F71688CDD2612CA117D1F54BDAE029", false),;
        private int id;
        private String name;
        private int productId;
        private String pubKey;
        private String privKey;
        private boolean isRSA;

        Product(int id, String name, int productId, String pubKey, String privKey, boolean isRSA) {
            this.id = id;
            this.name = name;
            this.pubKey = pubKey;
            this.privKey = privKey;
            this.productId = productId;
            this.isRSA = isRSA;
        }

        public int getId() {
            return id;
        }

        public String getName() {
            return name;
        }

        public BigInteger getPubKey() {
            return new BigInteger(pubKey, 16);
        }

        public BigInteger getPrivKey() {
            return new BigInteger(privKey, 16);
        }

        public int getProductId() {
            return productId;
        }

        public boolean isRSA() {
            return isRSA;
        }

        public static Product valueOf(int id) {
            for (Product product : Product.values()) {
                if (product.getId() == id) {
                    return product;
                }
            }

            return null;
        }

        @Override
        public String toString() {
            return id + ". " + name;
        }
    }

    public static void main(String[] args) throws IOException {
//        System.out.println("Jetbrains's Product Patch or Keygen.");
//        System.out.println("Crack by Rover12421.");
//        System.out.println("Http://Www.Rover12421.Com");
//        System.out.println("Please support genuine(https://www.jetbrains.com).");
//        printSelectProduct();
//        int sel;
//        Product product = null;
//        while (true) {
//            try {
//                sel = Integer.parseInt(readLine());
//                if ((product = Product.valueOf(sel)) != null) {
//                    break;
//                }
//            } catch (Throwable e) {
//            }
//
//            System.out.println("Enter err!");
//            printSelectProduct();
//        }
//
//        System.out.println("Please enter your username :");
//        String userName = readLine();
        String userName = "cylee";
        Product product = Product.Clion;
        if (product == product.Clion) {
            System.out.println("Clion need patch");
            System.out.println("Please enter your Clion install path or clion.jar path :");
//            String path = readLine();
//            while (!ClionPatch.patch(path)) {
//                System.out.println("Clion install path or clion.jar path error!");
//                System.out.println("Please re-enter!");
//                path = readLine();
//            }

            String path = "D:\\Program Files (x86)\\JetBrains\\CLion 2016.1.2";
            System.out.println(ClionPatch.patch(path));
        }

        System.out.println("---------------------------------------");

        GenericKeyMaker keyMaker = new GenericKeyMaker();
        if (product.isRSA) {
            System.out.println(keyMaker.generateRSAKey(product.getPrivKey(), product.getPubKey(), GenericKeyMaker.LICENSETYPE_NON_COMMERCIAL, product.getProductId(), 1, 13, userName));
        } else {
            System.out.println(keyMaker.generateNoRSAKey(product.getPrivKey(), product.getPubKey(), GenericKeyMaker.LICENSETYPE_NON_COMMERCIAL, product.getProductId(), 1, 14, userName));
        }
    }

    private static void printSelectProduct() {
        System.out.println();
        System.out.println("Please select product:");
        for (Product product : Product.values()) {
            System.out.println(product);
        }
    }

    private static String readLine() throws IOException {
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr);
        return br.readLine();
    }


    public static class ClionPatch {
        public static boolean patch(String src) throws IOException {
            File file = new File(src);
            if (file.isDirectory()) {
                File f = new File(file, "lib/clion.jar");
                if (f.exists()) {
                    file = f;
                } else {
                    f = new File(file, "clion.jar");
                    if (f.exists()) {
                        file = f;
                    }
                }
            }

            if (file.isDirectory() || !file.exists()) {
                System.out.println("Err : Not found clion.jar.");
                return false;
            }

            File patch = File.createTempFile("clion", "_patch.jar", file.getParentFile());

            byte[] srcKey = "8eeb1420b7d8b90aa3b95c7ff73628e46e12c19dc91531be5f517a54b042e99c17445ce7b23834a3ec80d2691b463231be43aab7e897cc334bc9b8bb9f0d55f5".getBytes();
            byte[] desKey = "c4ad4c091e08e5688b81b837506eb84d103fb3b2165f62e61c74b345d28c4a0cd0be2fadf485883d0ddd4e24aab758716027e84d420de525b042a70ff8174031".getBytes();

            boolean isPatch = false;
            boolean patched = false;
            try {
                FileInputStream fis = new FileInputStream(file);
                ZipInputStream zis = new ZipInputStream(fis);
                ZipFile zipFile = new ZipFile(file);

                FileOutputStream fos = new FileOutputStream(patch);
                ZipOutputStream zos = new ZipOutputStream(fos);
                ZipEntry entry;
                while ((entry = zis.getNextEntry()) != null) {
                    ZipEntry outEntry = new ZipEntry(entry);
                    try {
                        InputStream is = zipFile.getInputStream(entry);
                        if (entry.getName().endsWith(".class")) {
                            byte[] buff = readInputStream(is);
                            int index = indexOf(buff, srcKey);
                            if (index > 0) {
                                System.out.println("Find Key. Patch...");
                                System.arraycopy(desKey, 0, buff, index, desKey.length);
                                CRC32 crc32 = new CRC32();
                                crc32.update(buff);
                                outEntry.setCrc(crc32.getValue());
                                isPatch = true;
                            } else {
                                if (indexOf(buff, desKey) > 0) {
                                    System.out.println("Patched!");
                                    patched = true;
                                    break;
                                }
                            }
                            zos.putNextEntry(outEntry);
                            zos.write(buff);
                            zos.closeEntry();
                        } else {
                            zos.putNextEntry(outEntry);
                            copyStream(is, zos);
                            zos.closeEntry();
                        }
                    } catch (Exception e) {
                    }
                }
            } catch (Exception e) {
            }
            if (patched) {
                patch.delete();
                return true;
            }

            if (isPatch) {
                file.renameTo(new File(file.getAbsolutePath() + ".bak"));
                patch.renameTo(file);
            } else {
                patch.delete();
            }
            return isPatch;
        }

        public static void copyStream(InputStream is, OutputStream os) throws IOException {
            final int BUFFER_SIZE = 8 * 1024;
            if (is == null || os == null) {
                throw new IOException("Argument is null.");
            }

            byte[] bytes = new byte[BUFFER_SIZE];
            while (true) {
                int count = is.read(bytes, 0, BUFFER_SIZE);
                if (count == -1) {
                    break;
                }
                os.write(bytes, 0, count);
            }
        }

        public static byte[] readInputStream(InputStream input) {
            byte[] data = null;
            try {
                ByteArrayOutputStream output = new ByteArrayOutputStream();
                final byte[] buffer = new byte[1024];
                int len = 0;
                while ((len = input.read(buffer)) != -1) {
                    output.write(buffer, 0, len);
                }
                data = output.toByteArray();
                output.close();
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return data;
        }

        /**
         * Search the data byte array for the first occurrence
         * of the byte array pattern.
         */
        public static int indexOf(byte[] data, byte[] pattern) {
            int[] failure = computeFailure(pattern);

            int j = 0;

            for (int i = 0; i < data.length; i++) {
                while (j > 0 && pattern[j] != data[i]) {
                    j = failure[j - 1];
                }
                if (pattern[j] == data[i]) {
                    j++;
                }
                if (j == pattern.length) {
                    return i - pattern.length + 1;
                }
            }
            return -1;
        }

        /**
         * Computes the failure function using a boot-strapping process,
         * where the pattern is matched against itself.
         */
        private static int[] computeFailure(byte[] pattern) {
            int[] failure = new int[pattern.length];

            int j = 0;
            for (int i = 1; i < pattern.length; i++) {
                while (j > 0 && pattern[j] != pattern[i]) {
                    j = failure[j - 1];
                }
                if (pattern[j] == pattern[i]) {
                    j++;
                }
                failure[i] = j;
            }

            return failure;
        }

    }


    public static class GenericKeyMaker {
        public static final int LICENSETYPE_NON_COMMERCIAL = 1;
        public static final int PRODUCTID_IDEA = 1;
        public static final int PRODUCTID_RubyMine = 4;
        public static final int PRODUCTID_PyCharm = 5;
        public static final int PRODUCTID_WebStorm = 6;
        public static final int PRODUCTID_PhpStorm = 7;
        public static final int PRODUCTID_AppCode = 8;
        public static final int PRODUCTID_CLION = 10;

        private Random random = new Random();

        private String getLicenseId() {
            return String.format("D%sT", Integer.toString(random.nextInt(90000) + 10000));
        }

        private short getCRC(String s, int i, byte bytes[]) {
            CRC32 crc32 = new CRC32();
            if (s != null) {
                for (int j = 0; j < s.length(); j++) {
                    char c = s.charAt(j);
                    crc32.update(c);
                }
            }
            crc32.update(i);
            crc32.update(i >> 8);
            crc32.update(i >> 16);
            crc32.update(i >> 24);
            for (int k = 0; k < bytes.length - 2; k++) {
                byte byte0 = bytes[k];
                crc32.update(byte0);
            }
            return (short) (int) crc32.getValue();
        }

        private byte[] generateKeyBytes14(int licenseType, int productId,
                                          int minorVersion, int majorVersion,
                                          String userName, int customerId) {
            byte[] keyBytes = new byte[14];
            keyBytes[0] = (byte) ((licenseType << 4) + (productId & 0xFF));
            keyBytes[1] = (byte) ((minorVersion << 4) + (majorVersion & 0xFF));
            long time = System.currentTimeMillis() >> 16;
            keyBytes[2] = (byte) (int) (time & 0xFF);
            keyBytes[3] = (byte) (int) (time >> 8 & 0xFF);
            keyBytes[4] = (byte) (int) (time >> 16 & 0xFF);
            keyBytes[5] = (byte) (int) (time >> 24 & 0xFF);
            long timeDiff = Long.MAX_VALUE;
            keyBytes[6] = (byte) (int) (timeDiff & 0xFF);
            keyBytes[7] = (byte) (int) (timeDiff >> 8 & 0xFF);
            keyBytes[8] = 0;
            keyBytes[9] = 1;
            keyBytes[10] = 2;
            keyBytes[11] = 3;

            int crc32 = getCRC(userName, customerId, keyBytes);
            keyBytes[12] = (byte) (crc32 & 0xFF);
            keyBytes[13] = (byte) (crc32 >> 8 & 0xFF);

            return keyBytes;
        }

        private byte[] generateKeyBytes12(int licenseType, int productId,
                                          int minorVersion, int majorVersion,
                                          String userName, int customerId) {
            byte[] keyBytes = new byte[12];
            keyBytes[0] = (byte) ((licenseType << 4) + (productId & 0xFF));
            keyBytes[1] = (byte) ((minorVersion << 4) + (majorVersion & 0xFF));
            long time = System.currentTimeMillis() >> 16;
            keyBytes[2] = (byte) (int) (time & 0xFF);
            keyBytes[3] = (byte) (int) (time >> 8 & 0xFF);
            keyBytes[4] = (byte) (int) (time >> 16 & 0xFF);
            keyBytes[5] = (byte) (int) (time >> 24 & 0xFF);
            long timeDiff = Long.MAX_VALUE;
            keyBytes[6] = (byte) (int) (timeDiff & 0xFF);
            keyBytes[7] = (byte) (int) (timeDiff >> 8 & 0xFF);
            keyBytes[8] = 105;
            keyBytes[9] = -59;

            int crc32 = getCRC(userName, customerId, keyBytes);
            keyBytes[10] = (byte) (crc32 & 0xFF);
            keyBytes[11] = (byte) (crc32 >> 8 & 0xFF);

            return keyBytes;
        }

        /**
         * @param biginteger
         * @return String
         */
        public static String encodeGroups(BigInteger biginteger) {
            BigInteger beginner1 = BigInteger.valueOf(0x39aa400L);
            StringBuilder sb = new StringBuilder();
            for (int i = 0; biginteger.compareTo(BigInteger.ZERO) != 0; i++) {
                int j = biginteger.mod(beginner1).intValue();
                String s1 = encodeGroup(j);
                if (i > 0) {
                    sb.append("-");
                }
                sb.append(s1);
                biginteger = biginteger.divide(beginner1);
            }
            return sb.toString();
        }

        /**
         * @param i
         * @return
         */
        public static String encodeGroup(int i) {
            StringBuilder sb = new StringBuilder();
            for (int j = 0; j < 5; j++) {
                int k = i % 36;
                char c;
                if (k < 10) {
                    c = (char) (48 + k);
                } else {
                    c = (char) ((65 + k) - 10);
                }
                sb.append(c);
                i /= 36;
            }
            return sb.toString();
        }

        public String generateRSAKey(BigInteger privKey, BigInteger pubKey,
                                     int licenseType, int productId,
                                     int minorVersion, int majorVersion,
                                     String userName) {
            int customerId = random.nextInt(9000) + 1000;
            byte[] keyBytes = generateKeyBytes14(licenseType, productId, minorVersion, majorVersion, userName, customerId);
            RSAEncoder encoder = new RSAEncoder(privKey, pubKey, 64, false);
            String serial = encoder.encode(keyBytes);
            serial = "===== LICENSE BEGIN =====\n" + customerId + "-" + getLicenseId() + "\n" + serial + "\n===== LICENSE END =====";
            return serial;
        }

        public String generateNoRSAKey(BigInteger privKey, BigInteger pubKey,
                                       int licenseType, int productId,
                                       int minorVersion, int majorVersion,
                                       String userName) {
            int customerId = random.nextInt(9000) + 1000;
            byte[] keyBytes = generateKeyBytes12(licenseType, productId, minorVersion, majorVersion, userName, customerId);

            BigInteger k0 = new BigInteger(keyBytes);
            BigInteger k1 = k0.modPow(pubKey, privKey);
            String s0 = Integer.toString(customerId);
            String sz = "0";
            while (s0.length() != 5) {
                s0 = sz.concat(s0);
            }
            s0 = s0.concat("-");
            String s1 = encodeGroups(k1);
            s0 = s0.concat(s1);
            return s0;
        }
    }

    // ================================ //
    public static class RSAEncoder {
        private final BigInteger privKey;
        private final BigInteger pubKey;
        private final int c;
        private final int d;
        private int e = 0;
        private final BigInteger f;
        private final boolean g;

        public RSAEncoder(BigInteger privKey, BigInteger pubKey, int len, boolean newLine) {
            this.privKey = privKey;
            this.pubKey = pubKey;
            this.g = newLine;
            int privKeyLen = privKey.bitLength();
            this.f = new BigInteger(String.valueOf(len));
            int i = (int) Math.ceil(privKeyLen / Math.log(len) * Math.log(2.0D));
            if (i % 5 != 0) {
                i = (i / 5 + 1) * 5;
            }
            this.d = i;
            this.c = (privKeyLen / 8 - 1);
        }

        public String encode(byte[] bytes) {
            int i = bytes.length % this.c;
            byte[] arrayOfByte = new byte[i == 0 ? bytes.length : bytes.length + this.c - i];
            System.arraycopy(bytes, 0, arrayOfByte, this.c - i, bytes.length);

            StringBuffer stringBuffer = new StringBuffer();
            for (int j = 0; j < arrayOfByte.length; j += this.c) {
                encode(arrayOfByte, stringBuffer, j, this.c);
            }
            return stringBuffer.toString();
        }

        private void encode(byte[] bytes, StringBuffer stringBuffer, int off, int len) {
            if (len == 0) {
                return;
            }
            byte[] arrayOfByte = new byte[this.c];
            System.arraycopy(bytes, off, arrayOfByte, 0, len);
            BigInteger localBigInteger1 = new BigInteger(1, arrayOfByte);
            if (localBigInteger1.compareTo(this.pubKey) >= 0) {
                throw new IllegalArgumentException("result is too long");
            }
            BigInteger localBigInteger2 = localBigInteger1.modPow(this.privKey, this.pubKey);
            stringBuffer.append(a(a(localBigInteger2)));
        }

        private String a(String paramString) {
            StringBuffer localStringBuffer = new StringBuffer();
            for (int i = 0; i < paramString.length(); i++) {
                a(localStringBuffer);
                localStringBuffer.append(paramString.charAt(i));
            }
            return localStringBuffer.toString();
        }

        private String a(BigInteger paramBigInteger) {
            StringBuffer localStringBuffer = new StringBuffer();
            for (int i = 0; i < this.d; i++) {
                localStringBuffer.insert(0, b(paramBigInteger.mod(this.f)));
                paramBigInteger = paramBigInteger.divide(this.f);
            }
            return localStringBuffer.toString();
        }

        private void a(StringBuffer paramStringBuffer) {
            if ((this.e > 0) && (this.e % 5 == 0)) {
                if (this.e % 30 == 0)
                    paramStringBuffer.append('\n');
                else if (this.g) {
                    paramStringBuffer.append('-');
                }
            }
            this.e += 1;
        }

        private static char b(BigInteger paramBigInteger) {
            int i = paramBigInteger.intValue();
            char c1;
            if (i < 10) {
                c1 = (char) (48 + i);
            } else {
                if (i < 36) {
                    c1 = (char) (65 + i - 10);
                } else {
                    if (i < 62)
                        c1 = (char) (97 + i - 36);
                    else {
                        c1 = (char) (33 + i - 62);
                    }
                }
            }
            return c1;
        }
    }
}
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这